我有一个游标,它通过一个表+列名列表(按表和列名排序)并生成SQL查询。在每个循环中构造一部分查询,当表名与上一个循环的表名(保存在变量中)不同时执行整个查询。
这种方法的问题是最后一行不会触发执行部分,因为在最后一行之后没有新的表名。我必须在循环之后重复逻辑的整个代码,以处理最后一行并执行最后一次查询。
循环条件通常是:
WHILE @@FETCH_STATUS = 0 ... <logic> ... <fetch next> END
我试图将其更改为:
WHILE 1=1 ... <logic> ... IF @@FETCH_STATUS = -1 BREAK ... <fetch next> END
执行最后一个查询并退出循环,但问题是循环会在空集上触发,这很糟糕。
在我的情况下,有没有办法避免在循环之后重复循环代码?这是很多代码,难以维护。
PS光标是必要的,没有它,代码是不可读的。
答案 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