在SQL Server中创建递归函数

时间:2018-06-11 20:03:32

标签: sql sql-server

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

  

' 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 个答案:

答案 0 :(得分:2)

我怀疑你需要架构前缀:

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

但是,默认架构名称为dbo