2015-10-07 53 views
1

我不明白下面幾行的意義:SQL遊標提取狀態含義

WHILE 1 = 1 
    BEGIN 
     FETCH NEXT FROM SomeCursor INTO @SomeId, @SomeOtherColumn 

     IF @@FETCH_STATUS <> 0 BREAK 

什麼的含義,而1 = 1?並且如果獲取狀態不是0?

感謝

+5

[@@ FETCH_STATUS](https://msdn.microsoft.com/en-us/library/ms187308.aspx) – Lamak

回答

7

WHILE 1=1是一個循環的開始,總是導致TRUE結果,從而使循環開始(也可能永遠持續下去):

@@FETCH_STATUS點,如果有仍然是行會從光標獲取(或已經獲取)。

如果仍然有行可以從光標獲取,那麼@@FETCH_STATUS爲0,這表示SUCCESS

如果@@FETCH_STATUS<> 0(-1或-2),那麼它指的是不存在,可以從光標被返回更多的行,您已達到其端部。

這是通常情況下用於從超過遊標的循環中斷開的條件。

就像@Lamak所評論的,這裏是documentation for @@FETCH_STATUS

+0

謝謝,當它是<> 0? – Volkan

+0

非常感謝! – Volkan

3

這是一種常用於避免在代碼中編寫兩行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. 
+0

非常感謝! – Volkan

4

1 = 1只是一個短暫的狀態總是返回true,那就是永遠循環下去(當然,直到你擺脫它在其他地方)。

至於獲取狀態值,像往常一樣MSDN是你的朋友在這裏。從https://msdn.microsoft.com/en-us/library/ms187308.aspx

  • 0 = FETCH語句成功。
  • -1 = FETCH語句失敗或行超出結果集。
  • -2 =取出的行缺失。

例如,如果你得到0以外的任何東西,事情就會出錯,所以沒有必要繼續。

在附註中,MSDN還指出,這是一件遺留的事情,@@FETCH_STATUS是全局的,因此在使用多個遊標時,它不被信任。而是從sys.dm_exec_cursors動態管理功能中查找光標的單個獲取狀態值。

+0

非常感謝! – Volkan