我有一个存储过程的递归循环,我想在验证时停止执行该递归循环并返回一个空表。 我怎么能这样做?
这是一些示例代码:
alter procedure Searching
(parameters)
begin
do something
if(validation)
--exit here
else
exec Searching(parameters);
end
我还有另一个问题,如何在sql中声明一个全局变量?不应该从一个存储过程到另一个存储过程失去它的范围。
答案 0 :(得分:1)
T-SQL是递归的一个非常糟糕的选择。它不允许超过32个嵌套级别,请参阅@@NESTLEVEL
:
当超过最大值32时,交易终止。
与往常一样,答案是在集合中思考,使用SELECT而不是存储过程。阅读Recursive Queries Using Common Table Expressions。
至于为什么你的例子不起作用:你显然在你没有发布的代码中犯了一个错误。
答案 1 :(得分:0)
你必须打破递归的条件,以便在你返回后不再继续。你可以使用一个在每个循环后递减的整数,当它是负数时,你可以停止执行。