DEALLOCATE DEALLOCATE - 北京怡康軟件科技有限公司 資源網(wǎng) "/>
刪除游標引用。當釋放最后的游標引用時,組成該游標的數(shù)據(jù)結(jié)構(gòu)由 Microsoft® SQL Server™ 釋放。
DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }
cursor_name
是已聲明游標的名稱。當全局和局部游標都以 cursor_name 作為它們的名稱存在時,如果指定 GLOBAL,則 cursor_name 引用全局游標,如果未指定 GLOBAL,則 cursor_name 引用局部游標。
@cursor_variable_name
是 cursor 變量的名稱。@cursor_variable_name 必須為 cursor 類型。
對游標進行操作的語句使用游標名稱或游標變量引用游標。DEALLOCATE 刪除游標與游標名稱或游標變量之間的關(guān)聯(lián)。如果一個名稱或變量是最后引用游標的名稱或變量,則將釋放游標,游標使用的任何資源也隨之釋放。用于保護提取隔離的滾動鎖在 DEALLOCATE 上釋放。用于保護更新(包括通過游標進行的定位更新)的事務鎖一直到事務結(jié)束才釋放。
DECLARE CURSOR 語句分配游標并使其與游標名稱關(guān)聯(lián):
DECLARE abc SCROLL CURSOR FOR
SELECT * FROM authors
游標名稱與某個游標關(guān)聯(lián)之后,該游標在釋放之前不能用作相同作用域(GLOBAL 或 LOCAL)內(nèi)另一個游標的名稱。
游標變量使用下列兩種方法之一與游標關(guān)聯(lián):
DECLARE @MyCrsrRef CURSOR
SET @MyCrsrRef = abc
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM titles
DEALLOCATE @cursor_variable_name 語句只刪除對游標命名變量的引用。直到批處理、存儲過程或觸發(fā)器結(jié)束時變量離開作用域,才釋放變量。在 DEALLOCATE @cursor_variable_name 語句之后,可以使用 SET 語句使變量與另一個游標關(guān)聯(lián)。
USE pubs
GO
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM titles
DEALLOCATE @MyCursor
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM sales
GO
不必顯式釋放游標變量。變量在離開作用域時被隱性釋放。
默認情況下,將 DEALLOCATE 權(quán)限授予任何有效用戶。
下面的腳本顯示游標如何持續(xù)到最后的名稱或持續(xù)到引用它們的變量已釋放。
USE pubs相關(guān)文章
GO
-- Create and open a global named cursor that
-- is visible outside the batch.
DECLARE abc CURSOR GLOBAL SCROLL FOR
SELECT * FROM authors
OPEN abc
GO
-- Reference the named cursor with a cursor variable.
DECLARE @MyCrsrRef1 CURSOR
SET @MyCrsrRef1 = abc
-- Now deallocate the cursor reference.
DEALLOCATE @MyCrsrRef1
-- Cursor abc still exists.
FETCH NEXT FROM abc
GO
-- Reference the named cursor again.
DECLARE @MyCrsrRef2 CURSOR
SET @MyCrsrRef2 = abc
-- Now deallocate cursor name abc.
DEALLOCATE abc
-- Cursor still exists, referenced by @MyCrsrRef2.
FETCH NEXT FROM @MyCrsrRef2
-- Cursor finally is deallocated when last referencing
-- variable goes out of scope at the end of the batch.
GO
-- Create an unnamed cursor.
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM titles
-- The following statement deallocates the cursor
-- because no other variables reference it.
DEALLOCATE @MyCursor
GO