游標是系統為使用者開設的資料緩衝區,儲存 SQL 陳述式執行結果。關聯式資料庫操作針對整個結果集,但應用程式常需逐列或分批處理。游標提供定位特定列、逐列擷取、定位更新/刪除、可見性控制等機制,擴展結果集處理能力。
| 方法 | 語法/介面 | 適用層級 |
|---|---|---|
| Transact-SQL 游標 | DECLARE CURSOR ISO 擴充語法 | 指令碼、預存程序、觸發器(伺服器端) |
| API 游標函數 | ODBC、OLE DB、ADO 提供的游標 API | 應用程式(C#、VB、C++ 等) |
應用程式不可混用兩種方式。若已透過 API 設定游標行為(如 SQLSetStmtAttr 設定游標類型),隨後執行 DECLARE CURSOR 會要求 SQL Server 將 API 游標對應至 T-SQL 游標,導致未定義行為。正確順序:先將所有 API 游標屬性重設為預設值,再使用 T-SQL 游標;或反之。
若兩種方式皆未要求,SQL Server 回傳預設結果集:單一網路往返串流傳輸,效率最高,適用於一次性完整讀取場景。
FETCH),支援前向/後向捲動。UPDATE/DELETE WHERE CURRENT OF。CLOSE),必要時 DEALLOCATE 移除定義。Recordset 物件,CursorLocation、CursorType、LockType 屬性控制。IRowsetScroll、IRowsetChange、IRowsetUpdate 介面。SQLSetStmtAttr 設定 SQL_ATTR_CURSOR_TYPE、SQL_ATTR_CONCURRENCY,SQLFetchScroll、SQLSetPos 操作。FORWARD_ONLY / READ_ONLY 游標,開銷最小。WHERE CURRENT OF 或 SQLSetPos。CLOSE / DEALLOCATE 釋放伺服器資源(鎖、記憶體、TempDB 工作表)。