我正在尝试创建一个标量函数,用于根据传递给函数的日期和组织ID计算组织已经过多少个财务年度。我需要根据其ID查找组织,在其财政年度开始时获取,然后进行计算并返回。
对tblOrganizations表的两个引用都显示SQL71005并且没有解析,即使SSMS和VS都显示表的自动完成。
我远离SQL大师。有什么建议他们为什么不解决?
CREATE FUNCTION [dbo].[fnGetFinanicalYear] ( @dateOfInterest datetime, @organizationId bigint ) RETURNS INT AS BEGIN DECLARE @fyBegins datetime, @ret as bigint SELECT TOP 1 @fyBegins = [dbo].[tblOrganizations].[financialYearBegins] WHERE [dbo].[tblOrganizations].[id] = @organizationId; SELECT @ret = (CONVERT(int,CONVERT(char(8),@dateOfInterest,112))-CONVERT(char(8),@fyBegins,112))/10000; RETURN @ret; END
答案 0 :(得分:2)
如果与表进行交互,则需要from
子句:
SELECT TOP 1
@fyBegins = financialYearBegins
FROM
tblOrganizations
WHERE
id = @organizationId;
答案 1 :(得分:0)
我之前在T-SQL中看不到这种语法:
SELECT TOP 1 @fyBegins = [dbo].[tblOrganizations].[financialYearBegins] WHERE [dbo].[tblOrganizations].[id] = @organizationId;
试试这个:
SELECT TOP 1 @fyBegins = financialYearBegins FROM dbo.tblOrganizations WHERE id = @organizationId;
如果这没有解决问题,您可能需要检查权限以确保“用户”#39;执行该函数对表有SELECT权限。