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

MS SQL Server 游標 (CURSOR) 完整語法與實戰範例

     編輯:關於SqlServer

游標運作流程

  1. 宣告變數:接收每一列的欄位值。
  2. 宣告游標:定義 SELECT 查詢結果集。
  3. OPEN:開啟游標,指標指向第一列之前。
  4. FETCH NEXT:將下一列資料存入變數,@@FETCH_STATUS = 0 表示成功。
  5. WHILE 迴圈:處理當前列的業務邏輯。
  6. 再次 FETCH NEXT:移至下一列。
  7. CLOSE:關閉游標釋放結果集鎖定。
  8. DEALLOCATE:釋放游標資源。

完整範例

-- 1. 宣告接收變數
DECLARE @Col1 INT, @Col2 NVARCHAR(50)

-- 2. 宣告游標
DECLARE curDemo CURSOR FOR
SELECT Id, Name FROM DemoTable WHERE Status = 1

-- 3. 開啟
OPEN curDemo

-- 4. 取得第一列
FETCH NEXT FROM curDemo INTO @Col1, @Col2

-- 5. 迴圈處理
WHILE @@FETCH_STATUS = 0
BEGIN
    -- 業務邏輯:例如列印、更新其他表、發送通知等
    PRINT '處理 ID=' + CAST(@Col1 AS VARCHAR) + ', Name=' + @Col2

    -- 6. 取得下一列
    FETCH NEXT FROM curDemo INTO @Col1, @Col2
END

-- 7. 關閉
CLOSE curDemo
-- 8. 釋放
DEALLOCATE curDemo

效能與替代方案

  • 游標屬逐列處理(RBAR),效能較差,大量資料請優先考慮集合操作(JOIN、EXISTS、MERGE、暫存表)。
  • 若必須使用游標,加上 LOCAL FAST_FORWARD READ_ONLY 選項可減少鎖定與資源消耗:
    DECLARE curDemo CURSOR LOCAL FAST_FORWARD READ_ONLY FOR ...

游標程式碼示意圖 執行結果示意圖

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