處理完游標資料後,必須關閉游標以釋放結果集與資料列鎖定。CLOSE 僅關閉游標,不釋放游標佔用的資料結構,若後續需重新開啟同一游標,請使用 CLOSE。
CLOSE { { [GLOBAL] cursor_name } | cursor_variable_name }
若在游標開啟與讀取間包含交易(BEGIN TRANSACTION ... COMMIT/ROLLBACK),交易結束時 SQL Server 會自動關閉游標,導致後續 FETCH 失敗。典型錯誤流程:
BEGIN TRANSACTIONCOMMIT TRANSACTION → 游標被自動關閉執行 SET CURSOR_CLOSE_ON_COMMIT OFF,讓游標在交易提交或回滾後保持開啟狀態,避免中斷迴圈處理。
DEALLOCATE 會移除游標名稱/變數與游標的關聯,並釋放所有系統資源。語法:
DEALLOCATE { { [GLOBAL] cursor_name } | @cursor_variable_name }
釋放游標變數時,變數本身不會被釋放,除非超出預存程序/觸發器的作用域。
游標變數為 SQL Server 7.0 新增資料型別。兩種建立方式:
SET @cursor_var = cursor_name 指派。DECLARE CURSOR 定義。


CLOSE:暫時關閉,保留結構,可重開。DEALLOCATE:徹底釋放資源,游標名稱/變數失效。CURSOR_CLOSE_ON_COMMIT OFF。