Microsoft SQL Server 支援三種游標實作,依執行位置分為伺服器游標(前兩者)與用戶端游標:
| 類型 | 執行位置 | 管理方式 | 典型用途 |
|---|---|---|---|
| Transact-SQL 游標 | 伺服器 | DECLARE CURSOR 語法,透過 T-SQL 批次/預存程序/觸發器控制 | 伺服器端程式邏輯、逐列處理、維護作業 |
| API 伺服器游標 | 伺服器 | ODBC/OLE DB/ADO API 呼叫(SQLFetch、SQLSetPos 等),驅動程式轉發至伺服器 | 應用程式需伺服器端游標功能(動態、鍵集驅動) |
| 用戶端游標 | 用戶端 | ODBC 驅動/ADO DLL 內部實作,將整個結果集快取於用戶端記憶體 | 小型結果集、離線操作、僅支援前進/靜態游標 |
同一連接/陳述式控制代碼上,嚴禁混用 T-SQL DECLARE CURSOR 與 API 游標屬性設定。若已設定 API 游標屬性(如 SQL_ATTR_CURSOR_TYPE),再執行 DECLARE CURSOR 會導致驅動程式嘗試將 API 游標對應至 T-SQL 游標,引發行為不一致或錯誤。正確做法:先將所有 API 游標屬性重設為預設值,再使用 T-SQL 游標。
SELECT、含 COMPUTE/COMPUTE BY/FOR BROWSE/INTO 的查詢)。FETCH、OPEN、CLOSE)均需網路往返,增加延遲。FETCH 往返網路,伺服器端解析編譯執行計畫。適用於:需逐列處理、僅需部分結果集、支援捲動/定位更新。WHERE CURRENT OF、SQLSetPos 直接定位更新/刪除;用戶端游標模擬定位更新易因 WHERE 條件不唯一導致誤更新多列。除靜態/不敏感游標外,所有伺服器游標皆依賴基礎資料表結構。DECLARE CURSOR 後若基礎表結構變更(增/刪欄、索引變更),後續游標操作將失敗。
adUseClient)。