游標開啟後,使用 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。 |
將擷取的欄位值存入對應變數,變數數量、順序、資料型別必須與游標結果集欄位一致。
每次 FETCH 後應檢查此全域變數,判斷是否成功:

0:成功。-1:失敗(超出範圍或無資料)。-2:擷取的資料列已不存在(如被刪除)。| 游標宣告選項 | 可用 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 的多種導向模式與狀態檢查,是編寫高效、健壯游標程式的關鍵。依據業務需求選擇適當的游標類型,可在功能彈性與執行效能間取得最佳平衡。