标量函数

时间:2016-07-02 04:17:50

标签: sql-server tsql

我正在尝试创建一个标量函数,用于根据传递给函数的日期和组织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

2 个答案:

答案 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权限。