在SQL中创建递归标量函数

时间:2018-09-04 06:58:13

标签: sql sql-server recursion sql-function

我需要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.

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

3 个答案:

答案 0 :(得分:3)

尝试添加架构前缀,即

return dbo.Accounting_ToppestLevelID(@temp)

答案 1 :(得分:2)

您应该只指定函数的全名:它是在dbo中隐式创建的 如果未指定架构,则您的脚本应为:

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

答案 2 :(得分:1)

尝试显式添加架构。如果您不使用自定义选项,则默认为dbo:

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