我正在尝试编写一个SQL函数,但是在声明我需要在WHERE子句中使用的变量时遇到了问题。
以下是代码:
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
我想要构建的逻辑是:
'给予employeeId,返回所有“适用”政策 “适用”策略是Business Area,Location和EmployeeType与用户匹配的策略。
我正在尝试使用另一个函数(fn_getEmployeeDetails)来返回BusArea,Loc&给定用户的EmpType。 然后结果(存储为变量)我可以运行我的select语句来返回策略。
我遇到的问题是试图在函数中正确声明变量。
任何帮助或提示都将不胜感激。
提前致谢!
答案 0 :(得分:1)
在不知道你的错误究竟是什么的情况下,我只能说你没有使用varchar作为数据类型而没有指定长度。
DECLARE @empLoc varchar
将声明一个长度为1的varchar。
有可能是varchar(255)
或类似的东西。
第二个设置变量你需要使用SET并使用paranthisis进行选择或将其设置到语句中:
SET @empLoc = (SELECT Location FROM fn_getEmployeeDetails(@employeeid))
或
SELECT @empLoc = Location FROM fn_getEmployeeDetails(@employeeid)
这两种方法之间存在细微差别,但就目前而言,我认为这并不重要。
编辑:
根据您的评论,您在BEGIN
之后缺少AS
,END
之前缺少GO
。
基本上 - 你的函数语法是将“内联”表函数与“多语句”函数混合在一起 这样的功能“模板”看起来应该是这样的:
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的脚本)