SQL查询帮助 - 函数内的变量声明

时间:2014-09-30 08:13:15

标签: sql tsql

我正在尝试编写一个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语句来返回策略。

我遇到的问题是试图在函数中正确声明变量。

任何帮助或提示都将不胜感激。

提前致谢!

1 个答案:

答案 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之后缺少ASEND之前缺少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的脚本)