SQL错误超出最大存储过程,函数,触发器或视图嵌套级别

问题描述 投票:0回答:1

我有一个错误

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).

当我打电话时

select dbo.CheckProjectValidity(11, 9)

具有此SQL函数。

ALTER function [dbo].[CheckProjectValidity](@IdParent int, @IdStructure int)
RETURNS bit
AS
BEGIN
declare @Result bit;
if @IdParent=0
    set @Result = 0
    else
    if @IdParent=@IdStructure
        set @Result = 1
    else
        begin
            set @IdParent = (select st.IdParent from Structure st where st.IdParent=@IdParent);
            set @Result = dbo.CheckProjectValidity(@IdParent, @IdStructure)
        end
return @Result
END

我想从树中获取项目列表的想法。

sql-server tsql sql-function
1个回答
0
投票

由于此语句,您的过程将无限递归:

set @IdParent = (select st.IdParent from Structure st where st.IdParent=@IdParent)

实际上是将@IdParent设置为其现有值。您可能想使用类似以下内容的东西:

set @IdParent = (select st.IdParent from Structure st where st.Id=@IdParent)

(我猜IdParent指向另一行的Id值)

© www.soinside.com 2019 - 2024. All rights reserved.