DECLARE CURSOR (T-SQL)創建游標
定義 Transact-SQL 服務器游標的屬性,例如游標的滾動行為和用於生成游標所操作的結果集的查詢。DECLARE CURSOR 接受基於 SQL-92 標准的語法和使用一組 Transact-SQL 擴展插件的語法。
Transact-SQL 語法約定
語法
SQL 92 Syntax
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR ...{ READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL Extended Syntax
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
[ FORWARD_ONLY | SCROLL ]
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
[ TYPE_WARNING ]
FOR select_statement
[ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]
參數
cursor_name
所定義的 Transact-SQL 服務器游標的名稱。cursor_name 必須符合標識符規則。有關標識符規則的詳細信息,請參閱使用標識符作為對象名稱。
INSENSITIVE
定義一個游標,以創建將由該游標使用的數據的臨時復本。對游標的所有請求都從 tempdb 中的這一臨時表中得到應答;因此,在對該游標進行提取操作時返回的數據中不反映對基表所做的修改,並且該游標不允許修改。使用 SQL-92 語法時,如果省略 INSENSITIVE,則已提交的(任何用戶)對基礎表的刪除和更新都反映在後面的提取中。
SCROLL
指定所有的提取選項(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未在 SQL-92 DECLARE CURSOR 中指定 SCROLL,則 NEXT 是唯一支持的提取選項。如果也指定了 FAST_FORWARD,則不能指定 SCROLL。
select_statement
定義游標結果集的標准 SELECT 語句。在游標聲明的 select_statement 內不允許使用關鍵字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。
Microsoft 如果 select_statement 中的子句與所請求的游標類型的功能有沖突,則 SQL Server 會將游標隱式轉換為其他類型。有關詳細信息,請參閱使用隱式游標轉換。
READ ONLY
禁止通過該游標進行更新。在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標。該選項優於要更新的游標的默認功能。
UPDATE [OF column_name [,…n]]
定義游標中可更新的列。如果指定了 OF column_name [,…n],則只允許修改列出的列。如果指定了 UPDATE,但未指定列的列表,則可以更新所有列。
cursor_name
所定義的 Transact-SQL 服務器游標的名稱。cursor_name 必須符合標識符規則。有關標識符規則的詳細信息,請參閱使用標識符作為對象名稱。
LOCAL
指定對於在其中創建的批處理、存儲過程或觸發器來說,該游標的作用域是局部的。該游標名稱僅在這個作用域內有效。在批處理、存儲過程、觸發器或存儲過程 OUTPUT 參數中,該游標可由局部游標變量引用。OUTPUT 參數用於將局部游標傳遞回調用批處理、存儲過程或觸發器,它們可在存儲過程終止後給游標變量分配參數使其引用游標。除非 OUTPUT 參數將游標傳遞回來,否則游標將在批處理、存儲過程或觸發器終止時隱式釋放。如果 OUTPUT 參數將游標傳遞回來,則游標在最後引用它的變量釋放或離開作用域時釋放。
GLOBAL
指定該游標的作用域對來說連接是全局的。在由連接執行的任何存儲過程或批處理中,都可以引用該游標名稱。該游標僅在斷開連接時隱式釋放。