代码之家  ›  专栏  ›  技术社区  ›  Luis felipe De jesus Munoz

在SQL Server中创建递归函数

  •  2
  • Luis felipe De jesus Munoz  · 技术社区  · 6 年前

    我试图从函数本身调用一个函数,但它给了我错误

    “CalculateHoursBetweendates”不是可识别的内置函数名。

    我知道这是因为我没有创建函数,但是我从函数本身内部调用它。

    这是我的代码:

    create function CalculateHoursBetweenDates
         (@start varchar(50), 
          @end varchar(50), 
          @days int = 0) 
    returns int
    as 
    begin
        declare @dayDiff int = DATEDIFF(d, @start, @end) + DATEPART(dw, @start)
    
        if(@dayDiff > 6) 
        begin
            set @days = @days + (DATEPART(dw, @start) -7)
            set @start = DATEADD(d, 7 - (datepart(dw, @start) - 2), @start)
            return CalculateHoursBetweenDates(@start, @end, @days)
        end 
    
        return @days + DATEDIFF(d, @start, @end)
    end
    

    我说的是错误的方式还是什么?是否必须先创建一个空函数?我不明白

    1 回复  |  直到 6 年前
        1
  •  2
  •   Yogesh Sharma    6 年前

    我怀疑您需要模式前缀:

    select <scheme>.CalculateHoursBetweenDates (. . . .)
    

    但是,默认模式名称是 dbo