在 SQL 的存储过程中使用递归?

时间:2021-03-28 03:22:27

标签: sql-server tsql recursion stored-procedures

我将通过使用带有递归查询的 SQL 存储过程找到两个整数的 gcd。但是我陷入了一个循环,我真的不知道为什么,这是我的代码:

create or alter procedure sp_gcd 
    @s1 int, @s2 int
as
begin
    if (@s1 % @s2 = 0) 
        print @s2
    else if (@s2 % @s1 = 0) 
        print @s1
    else
        begin           
            while (@s2 % @s1 != 0)
                begin
                     declare @temp int = @s2 % @s1 
                     exec sp_gcd @temp, @s1
                end
            print @s1
        end     
 end
 exec sp_gcd 15,21

这是结果:

3
3
3
3
3
3
3
3
3
...

我刚刚开始使用 SQL,所以如果有人能提供帮助,我将不胜感激,非常感谢。

1 个答案:

答案 0 :(得分:1)

堆栈调用:

sp_gcd 15 21
sp_gcd 6 15
sp_gcd 3 6
print 3
sp_gcd 3 6
print 3
sp_gcd 3 6
print 3

发生这种情况的原因是在过程调用 sp_gcd 6 15 中的 while 循环从未达到假条件;也就是说,条件 15 % 6!=0 始终为真。