2014-09-30 51 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