我不明白以下几行的含义:
WHILE 1 = 1
BEGIN
FETCH NEXT FROM SomeCursor INTO @SomeId, @SomeOtherColumn
IF @@FETCH_STATUS <> 0 BREAK
1 = 1时的含义是什么?如果获取状态不是0?
感谢
答案 0 :(得分:9)
1 = 1只是一个总是返回true的短条件,即永远循环(好吧,直到你在其他地方突破它)。
至于获取状态值,通常MSDN是你的朋友。来自https://msdn.microsoft.com/en-us/library/ms187308.aspx
E.g。如果你得到的不是0,那么事情就出错了,所以继续没有意义。
另一方面,MSDN还指出这是遗留事物,@@FETCH_STATUS
是全局的,因此在使用多个游标的情况下,它是不可信任的。而是从sys.dm_exec_cursors
动态管理功能中查找光标的单个获取状态值。
答案 1 :(得分:8)
WHILE 1=1
是循环的开始,总是会产生TRUE
结果,从而使循环开始(并可能永远继续):
@@FETCH_STATUS
指向是否仍有从光标中提取(或已提取)的行。
如果仍然可以从光标中获取行,则@@FETCH_STATUS
为0,显示 SUCCESS 。
如果@@FETCH_STATUS
&lt;&gt; 0 ( - 1或-2)然后它指出没有更多的行可以从光标返回并且你已经到达它的末尾。
这是用于中断通过游标的循环的常用条件。
就像@Lamak评论的那样,这里是documentation for @@FETCH_STATUS。
答案 2 :(得分:4)
这是一种常用于避免在代码中编写FETCH NEXT
行两次的技巧。它通过WHILE 1 = 1
启动无限循环,并一直持续到@@FETCH_STATUS
返回0以外的值,表示它已到达光标的末尾,或者发生了错误。
可能的@@FETCH_STATUS
值为:
Return value Description
0 The FETCH statement was successful.
-1 The FETCH statement failed or the row was beyond the result set.
-2 The row fetched is missing.