2014-09-30 49 views
0

我正在嘗試編寫一個SQL函數,但是在聲明我需要在WHERE子句中使用的變量時遇到了問題。SQL查詢幫助 - 函數內變量的聲明

下面的代碼:

CREATE FUNCTION fn_getEmployeePolicies(@employeeid smallint) 
RETURNS TABLE 
AS 
DECLARE @empLoc varchar 
DECLARE @empBusA varchar 
DECLARE @empType varchar 
@empLoc = SELECT Location FROM fn_getEmployeeDetails(@employeeid) 
@empBusA = SELECT BusinessArea FROM fn_getEmployeeDetails(@employeeid) 
@empType = SELECT Type FROM fn_getEmployeeDetails(@employeeid) 
RETURN select PolicyId, PolicyGroupBusinessArea.BusinessArea, policysignoff.PolicyGroupLocation.Location, policysignoff.PolicyGroupEmployeeType.EmployeeType 
from policysignoff.PolicyGroupPolicy 
LEFT JOIN policysignoff.PolicyGroupBusinessArea on policysignoff.PolicyGroupBusinessArea.PolicyGroupId=policysignoff.PolicyGroupPolicy.PolicyGroupId 
LEFT JOIN policysignoff.PolicyGroupLocation on policysignoff.PolicyGroupLocation.PolicyGroupId=policysignoff.PolicyGroupPolicy.PolicyGroupId 
LEFT JOIN policysignoff.PolicyGroupEmployeeType on policysignoff.PolicyGroupEmployeeType.PolicyGroupId=policysignoff.PolicyGroupPolicy.PolicyGroupId 
where BusinessArea = @empBusA 
AND EmployeeType = @empType 
AND Location = @empLoc 
GO 

我試圖建立的邏輯是:

「給予僱員,返回所有‘適用’政策」 的「適用」的政策是一個地方Business Area,Location和EmployeeType與用戶的相匹配。

我想用另一個函數(fn_getEmployeeDetails)來爲給定用戶返回BusArea,Loc & EmpType。 然後用這個結果(作爲變量存儲),我可以運行我的select語句來返回策略。

我遇到的問題是試圖讓函數中正確聲明的變量。

任何幫助或提示,將不勝感激。

在此先感謝!

回答

1

不知道你的錯誤實際上是什麼,我只能說你沒有在使用varchar作爲數據類型之後沒有指定長度。

DECLARE @empLoc varchar將聲明長度爲1的varchar。 機會應該是類似於varchar(255)或類似的東西。

二來設置變量你要麼需要使用設置和使用paranthisis的選擇或將其設置到語句:

SET @empLoc = (SELECT Location FROM fn_getEmployeeDetails(@employeeid))

SELECT @empLoc = Location FROM fn_getEmployeeDetails(@employeeid)

有這兩個之間的細微差別方法,但爲了您的目的,我認爲這不重要。

編輯: 基於您的評論你缺乏ASBEGINGO之前END

基本上 - 你的函數語法將「內聯」表函數與「多語句」函數混合在一起。
這樣的功能的 「模板」 應該是這個樣子:

CREATE FUNCTION <Table_Function_Name, sysname, FunctionName> 
(
    -- Add the parameters for the function here 
    <@param1, sysname, @p1> <data_type_for_param1, , int>, 
    <@param2, sysname, @p2> <data_type_for_param2, , char> 
) 
RETURNS 
<@Table_Variable_Name, sysname, @Table_Var> TABLE 
(
    -- Add the column definitions for the TABLE variable here 
    <Column_1, sysname, c1> <Data_Type_For_Column1, , int>, 
    <Column_2, sysname, c2> <Data_Type_For_Column2, , int> 
) 
AS 
BEGIN 
    -- Fill the table variable with the rows for your result set 
    RETURN 
END 
GO 

(從SQL Server Management Studio中採取腳本)

+0

感謝艾倫。 括號對選擇語句進行排序。 不幸的是,即使添加了長度,變量的聲明仍然不起作用。 我得到的錯誤是: 「不正確的語法附近申報。期待開始或返回」 – user2190629 2014-09-30 09:09:57

+0

我已經修改我的答案 – 2014-09-30 11:03:41