在 SQL 中创建递归标量函数

Create recursive scalar function in SQL

我需要 SQL Server 2014 中的递归标量函数。 我的代码是这样的:

CREATE FUNCTION Accounting_ToppestLevelID 
(
    @ID numeric(6,0)
)
RETURNS numeric(6,0)
AS
BEGIN
    declare @temp numeric(6,0)
    select @temp = a.ParentID from Accounting_AcntAccount a where a.ID = @ID
    if @temp is null
    begin
        return @ID
    end
    return Accounting_ToppestLevelID(@temp)
END

但是执行下面的代码后会出现错误:

Msg 195, Level 15, State 10, Procedure Accounting_ToppestLevelID, Line 34
'Accounting_ToppestLevelID' is not a recognized built-in function name.

这是一个逻辑错误,但我该如何解决?

您应该简单地指定函数的全名:它是在 dbo 中隐式创建的 schema 如果没有指定模式,那么你的脚本应该是:

CREATE FUNCTION Accounting_ToppestLevelID 
(
    @ID numeric(6,0)
)
RETURNS numeric(6,0)
AS
BEGIN
    declare @temp numeric(6,0)
    select @temp = a.ParentID from Accounting_AcntAccount a where a.ID = @ID
    if @temp is null
    begin
        return @ID
    end
    return dbo.Accounting_ToppestLevelID(@temp)
END

尝试添加架构前缀,即。

return dbo.Accounting_ToppestLevelID(@temp)

尝试明确添加架构。如果您不使用自定义的,则默认为 dbo:

return [dbo].[Accounting_ToppestLevelID](@temp);