在WHILE循环中添加额外的循环

时间:2016-07-18 13:39:51

标签: sql sql-server loops

我有一个游标,它通过一个表+列名列表(按表和列名排序)并生成SQL查询。在每个循环中构造一部分查询,当表名与上一个循环的表名(保存在变量中)不同时执行整个查询。

这种方法的问题是最后一行不会触发执行部分,因为在最后一行之后没有新的表名。我必须在循环之后重复逻辑的整个代码,以处理最后一行并执行最后一次查询。

循环条件通常是:

WHILE @@FETCH_STATUS = 0 ... <logic> ... <fetch next> END

我试图将其更改为:

WHILE 1=1 ... <logic> ... IF @@FETCH_STATUS = -1 BREAK ... <fetch next> END

执行最后一个查询并退出循环,但问题是循环会在空集上触发,这很糟糕。

在我的情况下,有没有办法避免在循环之后重复循环代码?这是很多代码,难以维护。

PS光标是必要的,没有它,代码是不可读的。

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找的逻辑是:

Declare YourCursor Cursor ...
...

While (1 = 1)
Begin
    Fetch Next From YourCursor Into @C_YourVariables    

    If @@Fetch_Status <> 0 Break

    <Do stuff>
End

Close YourCursor
Deallocate YourCursor