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

SQL Server 游標完整指南(二):生命週期五階段與宣告參數詳解

     編輯:關於SqlServer

游標生命週期劃分為五個階段:宣告、開啟、讀取、關閉、釋放。本文詳細說明各階段語法與 DECLARE CURSOR 完整參數選項。

五大生命週期階段

  1. 宣告游標: 定義 SELECT 查詢,**不檢索資料**,僅建立元資料。
  2. 開啟游標: OPEN 執行查詢填充結果集,游標位置置於第一列之前。
  3. 讀取資料: FETCH 移動位置並將欄位值賦予變數。
  4. 關閉游標: CLOSE 釋放結果集鎖定與資源,定義保留可重開。
  5. 釋放游標: DEALLOCATE 徹底移除定義釋放所有記憶體。

DECLARE CURSOR 完整語法與參數對照表

DECLARE cursor_name CURSOR 
[ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]

作用域選項

  • LOCAL (預設):僅限建立批次/程序/觸發器內可見,結束自動釋放。
  • GLOBAL:整個連線工作階段可見,任何程序/批次可引用,斷開連線才隱性釋放。

捲動能力選項

  • FORWARD_ONLY (預設):只能 FETCH NEXT 循序讀取。
  • SCROLL:支援 FIRST, LAST, PRIOR, NEXT, ABSOLUTE, RELATIVE 任意導航。

並發與鎖定型態 (三選一)

選項行為描述
READ_ONLY唯讀,不允許透過游標修改/刪除,效能最佳。
SCROLL_LOCKS讀取時加鎖 (悲觀),保證透過游標更新/刪除成功。
OPTIMISTIC讀取不鎖,依時間戳/檢查碼偵測衝突,若資料已變更則更新/刪除失敗。

型態選項 (四選一,預設視捲動而定)

  • STATIC:結果集複製至 tempdb,唯讀快照。
  • KEYSET:鍵值固定存 tempdb,非鍵欄更新可見。
  • DYNAMIC:即時反映所有變更。
  • FAST_FORWARD:FORWARD_ONLY + READ_ONLY 效能最佳化內部捷徑。

常見宣告範例

-- 標準游標 (預設 FORWARD_ONLY, STATIC/KEYSET 視查詢而定)
DECLARE MyCursor CURSOR FOR SELECT * FROM Master_Goods;

-- 唯讀游標
DECLARE MyCursor CURSOR FOR SELECT * FROM Master_Goods FOR READ ONLY;

-- 可更新游標
DECLARE MyCursor CURSOR FOR SELECT * FROM Master_Goods FOR UPDATE;

開啟游標

OPEN MyCursor;        -- 局部
OPEN GLOBAL MyCursor; -- 全域

執行 OPEN 即填充結果集,游標位置置於第一列之前,首次 FETCH NEXT 取得第一列。

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