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

SQL Server 2000 游標完整使用指南與範例

     編輯:關於SqlServer

游標宣告語法

DECLARE cursor_name CURSOR
    [ LOCAL | GLOBAL ]
    [ FORWARD_ONLY | SCROLL ]
    [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
    [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
    FOR select_statement

常用選項組合

  • SCROLL DYNAMIC:可任意移動(FETCH FIRST/NEXT/PRIOR/LAST/ABSOLUTE/RELATIVE),支援更新/刪除。
  • FAST_FORWARD:唯讀、僅向前、效能最佳(內部為 FORWARD_ONLY READ_ONLY 優化)。

完整範例:逐筆處理並示範更新/刪除

USE DB1;
GO

DECLARE MyCursor CURSOR SCROLL DYNAMIC
FOR SELECT Name FROM PersonalInfo;

DECLARE @Name SYSNAME;

OPEN MyCursor;
FETCH NEXT FROM MyCursor INTO @Name;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'Name: ' + @Name;
    FETCH NEXT FROM MyCursor INTO @Name;
END

-- 示範移動到第一筆
FETCH FIRST FROM MyCursor INTO @Name;
PRINT 'First: ' + @Name;

-- 更新當前資料列(需 DYNAMIC 或 KEYSET)
-- UPDATE PersonalInfo SET Name = 'ZZG' WHERE CURRENT OF MyCursor;

-- 刪除當前資料列
-- DELETE FROM PersonalInfo WHERE CURRENT OF MyCursor;

CLOSE MyCursor;
DEALLOCATE MyCursor;
GO

關鍵點提醒

  1. 必須成對使用:OPEN / CLOSE、DECLARE / DEALLOCATE。
  2. @@FETCH_STATUS:0=成功,-1=失敗/超出範圍,-2=資料列已刪除。
  3. WHERE CURRENT OF 只能用於支援更新的游標(DYNAMIC, KEYSET, STATIC 配合 SCROLL_LOCKS 或 OPTIMISTIC)。
  4. 大量資料集合操作優先用 SET 為基礎的 SQL,游標僅用於必須逐列邏輯(如呼叫外部 API、複雜序列處理)。

效能替代方案

  • WHILE 迴圈配合 TOP (1) / ROW_NUMBER()。
  • 暫存表 + UPDATE ... FROM 批次處理。
  • CLR 預存程序(SQL Server 2005+)處理複雜迭代邏輯。

善用游標屬性與 FETCH 選項,能精準控制資料列級別的操作流程。

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