游標是一個儲存在 DBMS 伺服器上的資料庫查詢物件,它不只是一條 SELECT 語句,而是該語句檢索出的結果集。儲存游標後,應用程式可以根據需要在結果集中捲動或瀏覽資料,實現逐行處理的邏輯。
宣告後可反覆開啟/關閉;開啟期間可多次執行 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:完全釋放游標佔用的資源與定義。READ_ONLY、FORWARD_ONLY、LOCAL 選項以減少鎖定與資源消耗。CLOSE 與 DEALLOCATE,避免記憶體洩漏。