我不明白下面几行的意义:SQL游标提取状态含义
WHILE 1 = 1
BEGIN
FETCH NEXT FROM SomeCursor INTO @SomeId, @SomeOtherColumn
IF @@FETCH_STATUS <> 0 BREAK
什么的含义,而1 = 1?并且如果获取状态不是0?
感谢
我不明白下面几行的意义:SQL游标提取状态含义
WHILE 1 = 1
BEGIN
FETCH NEXT FROM SomeCursor INTO @SomeId, @SomeOtherColumn
IF @@FETCH_STATUS <> 0 BREAK
什么的含义,而1 = 1?并且如果获取状态不是0?
感谢
WHILE 1=1
是一个循环的开始,总是导致TRUE
结果,从而使循环开始(也可能永远持续下去):
@@FETCH_STATUS
点,如果有仍然是行会从光标获取(或已经获取)。
如果仍然有行可以从光标获取,那么@@FETCH_STATUS
为0,这表示SUCCESS。
如果@@FETCH_STATUS
是<> 0(-1或-2),那么它指的是不存在,可以从光标被返回更多的行,您已达到其端部。
这是通常情况下用于从超过游标的循环中断开的条件。
就像@Lamak所评论的,这里是documentation for @@FETCH_STATUS。
这是一种常用于避免在代码中编写两行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.
非常感谢! – Volkan
1 = 1只是一个短暂的状态总是返回true,那就是永远循环下去(当然,直到你摆脱它在其他地方)。
至于获取状态值,像往常一样MSDN是你的朋友在这里。从https://msdn.microsoft.com/en-us/library/ms187308.aspx
例如,如果你得到0以外的任何东西,事情就会出错,所以没有必要继续。
在附注中,MSDN还指出,这是一件遗留的事情,@@FETCH_STATUS
是全局的,因此在使用多个游标时,它不被信任。而是从sys.dm_exec_cursors
动态管理功能中查找光标的单个获取状态值。
非常感谢! – Volkan
[@@ FETCH_STATUS](https://msdn.microsoft.com/en-us/library/ms187308.aspx) – Lamak