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

SQL error Maximum stored procedure, function, trigger, or view nesting level exceeded

我有一个错误

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


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

您的过程由于以下语句而无限递归:

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 值)