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

SQL Server 游標完整操作指南:建立、使用與關閉

     編輯:關於SqlServer

什麼是游標?

游標是一個儲存在 DBMS 伺服器上的資料庫查詢物件,它不只是一條 SELECT 語句,而是該語句檢索出的結果集。儲存游標後,應用程式可以根據需要在結果集中捲動或瀏覽資料,實現逐行處理的邏輯。

游標使用的四大核心步驟

  1. 宣告(定義)游標:指定 SELECT 語句與游標選項,此時尚未檢索資料。
  2. 開啟游標:依照定義的 SELECT 語句實際檢索資料,填入游標。
  3. 提取資料:使用 FETCH 逐行讀取,將欄位值存入變數供後續處理。
  4. 關閉與釋放:結束使用時必須 CLOSE,若不再需要則 DEALLOCATE 釋放資源。

宣告後可反覆開啟/關閉;開啟期間可多次執行 FETCH 操作。

建立游標範例

DECLARE CustCursor CURSOR
FOR
SELECT * FROM Customers
WHERE cust_email IS NULL

使用游標逐行處理資料

DECLARE @cust_id CHAR(10),
        @cust_name CHAR(50),
        @cust_address CHAR(50),
        @cust_city CHAR(50),
        @cust_state CHAR(5),
        @cust_zip CHAR(10),
        @cust_country CHAR(50),
        @cust_contact CHAR(50),
        @cust_email CHAR(255)

OPEN CustCursor
FETCH NEXT FROM CustCursor
INTO @cust_id, @cust_name, @cust_address,
     @cust_city, @cust_state, @cust_zip,
     @cust_country, @cust_contact, @cust_email

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 此處放入實際業務邏輯,例如更新、計算、輸出等
    FETCH NEXT FROM CustCursor
    INTO @cust_id, @cust_name, @cust_address,
         @cust_city, @cust_state, @cust_zip,
         @cust_country, @cust_contact, @cust_email
END

CLOSE CustCursor

說明:每個欄位對應一個變數,WHILE 迴圈以 @@FETCH_STATUS = 0 判斷是否還有下一行;實際專案中請將註解處替換為具體處理程式碼。

關閉與釋放游標

CLOSE CustCursor
DEALLOCATE CURSOR CustCursor
  • CLOSE:關閉游標,關閉後不可使用,但可再次 OPEN 而無需重新宣告。
  • DEALLOCATE:完全釋放游標佔用的資源與定義。

效能與最佳實務提醒

  • 游標屬於逐行處理(RBAR),效能通常較集合式操作差,能用單一 SQL 解決時優先考慮集合式寫法。
  • 若必須使用游標,建議加上 READ_ONLY、FORWARD_ONLY、LOCAL 選項以減少鎖定與資源消耗。
  • 務必成對使用 CLOSE 與 DEALLOCATE,避免記憶體洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved