2010年8月17日 星期二

DEALLOCATE

引自:微軟-HELP,詳細請至微軟官網查看
移除資料指標參考。
語法
DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

引數
cursor_name

是已宣告資料指標的名稱。若同時有名為 cursor_name 的全域及區域資料指標存在,當指定 GLOBAL 時,cursor_name 參考全域資料指標,若未指定 GLOBAL,則參考區域資料指標。

@cursor_variable_name

是 cursor 變數的名稱。@cursor_variable_name 的型別必須是 cursor。

備註
作用於資料指標的陳述式會使用資料指標名稱或資料指標變數來參考資料指標。DEALLOCATE 會移除資料指標與資料指標名稱或資料指標變數之間的關聯。如果名稱或變數是最後一個參考該資料指標者,該資料指標便會被解除配置,它所使用的任何資源也會被釋放。用來保護提取隔離性的捲動鎖定會在 DEALLOCATE 時被釋放。用來保護更新 (包括透過此資料指標所做的定位更新) 的交易鎖定則會保留到交易結束為止。

DECLARE CURSOR 陳述式可配置資料指標,並將其關聯到一個資料指標名稱:

DECLARE abc SCROLL CURSOR FOR
SELECT * FROM authors

資料指標名稱被關聯到某個資料指標之後,此名稱就不能被相同範圍 (GLOBAL 或 LOCAL) 的另一個資料指標所用,直到這個資料指標被解除配置為止。

資料指標變數可以用下列兩種方式關聯到某個資料指標:

依據名稱,即使用 SET 陳述式將資料指標設定為某個資料指標變數:
DECLARE @MyCrsrRef CURSOR
SET @MyCrsrRef = abc

資料指標也可以在不定義資料指標名稱的情況下建立,並將其關聯到某個變數:
DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM titles

DEALLOCATE @cursor_variable_name 陳述式只會移除具名變數對資料指標的參考。變數一直到批次、預存程序或觸發程序結尾超出範圍時才會被解除配置。在 DEALLOCATE @cursor_variable_name 陳述式之後,變數即可使用 SET 陳述式被關聯到另一個資料指標。

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 權限預設授與任何有效的使用者。

範例
以下指令碼顯示了資料指標維持到最後一個名稱被解除配置,或參考該資料指標的變數被解除配置為止。

USE pubs
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

沒有留言:

張貼留言