在某些验证时停止执行递归循环

时间:2015-02-17 06:45:26

标签: sql sql-server

我有一个存储过程的递归循环,我想在验证时停止执行该递归循环并返回一个空表。 我怎么能这样做?

这是一些示例代码:

alter procedure Searching
(parameters)
begin
  do something
  if(validation)
     --exit here
  else
    exec Searching(parameters);
end

我还有另一个问题,如何在sql中声明一个全局变量?不应该从一个存储过程到另一个存储过程失去它的范围。

2 个答案:

答案 0 :(得分:1)

T-SQL是递归的一个非常糟糕的选择。它不允许超过32个嵌套级别,请参阅@@NESTLEVEL

  

当超过最大值32时,交易终止。

与往常一样,答案是在集合中思考,使用SELECT而不是存储过程。阅读Recursive Queries Using Common Table Expressions

至于为什么你的例子不起作用:你显然在你没有发布的代码中犯了一个错误。

答案 1 :(得分:0)

你必须打破递归的条件,以便在你返回后不再继续。你可以使用一个在每个循环后递减的整数,当它是负数时,你可以停止执行。