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

SQL Server 游標完整指南(三):FETCH 導航選項、資源釋放與資料異動實戰

     編輯:關於SqlServer

本文聚焦 FETCH 七大導航模式、CLOSE/DEALLOCATE 資源管理差異、完整迴圈範例,以及透過 WHERE CURRENT OF 實現游標定位更新/刪除。

FETCH 七大導航選項完整對照

FETCH [ NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n ] 
FROM cursor_name
INTO @var1, @var2, ...;
選項行為描述首次執行位置
NEXT (預設)移至下一列第一列
PRIOR移至上一列第一列之前 (無資料)
FIRST移至第一列第一列
LAST移至最後一列最後一列
ABSOLUTE n正數:從頭第 n 列;負數:從尾第 n 列;0:當前列依 n 值
RELATIVE n正數:從當前向後 n 列;負數:向前 n 列;0:當前列依 n 值

關閉與釋放:關鍵差異

  • CLOSE cursor_name:釋放結果集鎖定與記憶體,**保留游標定義**,可再次 OPEN 重用。
  • DEALLOCATE cursor_name:徹底移除定義,**釋放所有資源**,不可再用。
  • 全域游標需加 GLOBAL 關鍵字:CLOSE GLOBAL MyCursor。

完整 WHILE 迴圈處理範本

DECLARE MyCursor CURSOR SCROLL FOR 
    SELECT GoodsCode, GoodsName FROM Master_Goods ORDER BY GoodsCode;

OPEN MyCursor;
FETCH NEXT FROM MyCursor INTO @GoodsCode, @GoodsName;

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 處理邏輯 (此處示範格式化列印)
    SELECT @GoodsCode = CONVERT(CHAR(20), @GoodsCode);
    SELECT @GoodsName = CONVERT(CHAR(20), @GoodsName);
    PRINT @GoodsCode + ':' + @GoodsName;

    FETCH NEXT FROM MyCursor INTO @GoodsCode, @GoodsName;
END

CLOSE MyCursor;
DEALLOCATE MyCursor;

游標定位資料異動 (WHERE CURRENT OF)

針對**目前游標所指資料列**進行更新或刪除,無需再次指定主鍵條件,確保異動目標與讀取一致。

-- 更新目前列
UPDATE Master_Goods 
SET GoodsName = 'yangyang8848' 
WHERE CURRENT OF MyCursor;

-- 刪除目前列
DELETE FROM Master_Goods 
WHERE CURRENT OF MyCursor;

前提: 游標宣告時需包含 FOR UPDATE 且非 READ_ONLY、STATIC 或 FAST_FORWARD 型態。

@@CURSOR_ROWS 全域變數

回傳**最後一次開啟的游標**結果集資料列數 (僅適用同步/靜態/鍵集游標;動態游標可能為負數表示非同步填充中)。

SELECT @@CURSOR_ROWS; -- 僅反映連線上最後開啟的游標
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved