我不明白下面幾行的意義: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