我需要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.
这是一个逻辑错误,但是我该如何解决?
答案 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);