首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL Server FETCH 命令完整解析:游標資料讀取全攻略

     編輯:關於SqlServer

游標開啟後,使用 FETCH 命令逐列讀取資料進行處理。FETCH 支援多種導向選項,靈活控制讀取位置。

FETCH 語法與選項說明

FETCH [ [NEXT | PRIOR | FIRST | LAST | ABSOLUTE {n | @nvar} | RELATIVE {n | @nvar}] ]
[ INTO @variable_name [,...n] ] FROM cursor_name

導向選項

選項行為
NEXT傳回當前列的下一列;若為首次 FETCH,則傳回第一列。
PRIOR傳回當前列的上一列;若為首次 FETCH,無資料回傳,游標定位至第一列。
FIRST傳回結果集第一列。
LAST傳回結果集最後一列。
ABSOLUTE {n | @nvar}正數:從開頭算第 n 列;負數:從結尾算第 n 列。超出範圍時 @@FETCH_STATUS 回傳 -1。
RELATIVE {n | @nvar}正數:從當前位置向後 n 列;負數:向前 n 列。超出範圍同 ABSOLUTE。

INTO 子句

將擷取的欄位值存入對應變數,變數數量、順序、資料型別必須與游標結果集欄位一致。

@@FETCH_STATUS 狀態值

每次 FETCH 後應檢查此全域變數,判斷是否成功:

FETCH_STATUS 狀態表

  • 0:成功。
  • -1:失敗(超出範圍或無資料)。
  • -2:擷取的資料列已不存在(如被刪除)。

游標類型與 FETCH 可用選項對照

游標宣告選項可用 FETCH 選項
SQL-92 語法,無 SCROLL僅 NEXT
SQL-92 語法,有 SCROLL全部(FIRST, LAST, PRIOR, NEXT, ABSOLUTE, RELATIVE)
T-SQL 擴充語法:FORWARD_ONLY / FAST_FORWARD僅 NEXT
T-SQL 擴充語法:KEYSET / STATIC / SCROLL(無 DYNAMIC, FORWARD_ONLY, FAST_FORWARD)全部
DYNAMIC SCROLL全部,但禁用 ABSOLUTE

實務建議

  • 預設使用 WHILE @@FETCH_STATUS = 0 迴圈逐列處理。
  • 需隨機存取時,宣告時務必加入 SCROLL 選項。
  • 效能優先考慮 FAST_FORWARD(唯讀、順向),僅支援 NEXT。

總結

熟練掌握 FETCH 的多種導向模式與狀態檢查,是編寫高效、健壯游標程式的關鍵。依據業務需求選擇適當的游標類型,可在功能彈性與執行效能間取得最佳平衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved