SQL查询帮助-函数中变量的声明
我正在尝试编写一个SQL函数,但是在声明我需要在WHERE子句中使用的变量时遇到了问题 代码如下:SQL查询帮助-函数中变量的声明,sql,tsql,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_getEmployeeDe
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,返回所有适用的保单'
适用的策略是业务领域、位置和员工类型与用户匹配的策略
我试图使用另一个函数fn_getEmployeeDetails返回给定用户的BusArea、Loc和EmpType。
然后,使用存储为变量的结果,我可以运行select语句返回策略
我遇到的问题是试图在函数中正确声明变量
任何帮助或提示都将不胜感激
提前谢谢 在不知道您的错误实际是什么的情况下,我只能说,在使用varchar作为数据类型而不指定长度之后,您的错误是不正确的 DECLARE@empLoc varchar将声明长度为1的varchar。 很可能它应该是varchar255或类似的东西 其次,要设置变量,您需要使用set和paranithis for selects,或者将其设置到语句中: SET@empLoc=从fn中选择位置_getEmployeeDetails@employeeid 或 从fn中选择@empLoc=位置_getEmployeeDetails@employeeid 这两种方法之间有细微的区别,但就你目前的目的而言,我认为这并不重要 编辑: 根据您的评论,您缺少AS后开始和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谢谢Allan。括号对select语句进行排序。不幸的是,即使添加了长度,变量的声明仍然不起作用。我得到的错误是:declare附近的语法不正确。我已经修改了我的答案