2011-04-14 71 views
0

我想用創建內嵌表值函數下面的語句創建內嵌表值函數SQL服務器2008

USE [abc] 
    GO 
    /****** Object: UserDefinedFunction [dbo].[fnspEmpPeriodSkus] Script Date: 04/14/2011 16:26:19 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 

    ALTER FUNCTION [dbo].[fnspEmpPeriodSkus] 
    ( 
     -- Add the parameters for the function here 
     @PositionID int 
    ) 
    RETURNS TABLE 
    AS 
    RETURN 
    (


declare @PeriodTypeID int 
select @PeriodTypeID = cofig.PeriodTypeID from sysMarketSaleConfigurations config inner join setupJobs j on j.JobID = config.JobID 
inner join setupDesignations d on d.JobID = j.JobID where d.DesignationID = @PositionID 

SELECT EmployeeID,EmployeeName, ZoneID,Zone,RegionID,Region,TerritoryID,Territory, StartDate, EndDate, empperiods.PeriodID, empperiods.DesignationID, EmpSkus.SKUID, EmpSkus.SKUCode, EmpSkus.Title, EmpSkus.GroupName, 
              EmpSkus.ProductGroupID, EmpSkus.PositionID,EmpSkus.PositionTitle 
FROM   (SELECT  StartDate, EndDate, PeriodID, DesignationID 
                FROM   (SELECT  sysPeriods.PeriodID, sysPeriods.StartDate, sysPeriods.EndDate, setupDesignations.DesignationID 
                      FROM   setupJobs INNER JOIN 
                          setupDesignations ON setupJobs.JobID = setupDesignations.JobID CROSS JOIN 
                          sysPeriods 
                      WHERE  Year(sysPeriods.StartDate) = Year(Current_timestamp) and (sysPeriods.PeriodTypeID = @PeriodTypeID)) AS drvtbl) AS empperiods LEFT OUTER JOIN 
                 dbo.vwEmpSkus AS EmpSkus ON 
                empperiods.DesignationID = EmpSkus.PositionID 
    ) 

,但它給了我下面的錯誤:附近關鍵字聲明不正確的語法。
問題:是否有可能在內聯值表函數中做我想做的事情(聲明一個變量並使用函數的參數從查詢中獲得結果)然後將此值傳遞給將計算結果的主查詢)?如果是的話如何?如果沒有什麼選擇多語句表值函數或其他東西。我欣賞建議和其他想法

回答

1

不,你不能在內聯表值函數中聲明變量。

雖然您可以將2個查詢合併爲1,但您應該能夠將該初始選擇合併到您當前使用該變量的子查詢中。

+0

你可以解釋我怎麼可以用子查詢來替代它 – 2011-04-14 12:30:24