在 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);
我需要 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);