Udostępnij za pośrednictwem


DEALLOCATE (Transact-SQL)

Usuwa odwołanie kursor .Po dealokowaniu ostatniego odniesienia kursor struktur danych, składający się kursor zostaną zwolnione przez Microsoft SQL Server.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

Argumenty

  • cursor_name
    Jest to nazwa już zadeklarowana kursor.Jeśli globalnym i lokalnym kursor istnieje z cursor_name jako swojej nazwy cursor_name odnosi się do globalnego kursor , jeżeli określono globalne i lokalne kursor Jeżeli nie określono GLOBALNEGO.

  • @cursor_variable_name
    Jest to nazwa cursor zmienną.@cursor_variable_name musi być typu cursor.

Uwagi

Instrukcje, które operują na kursory służy nazwa kursor lub zmiennej kursor do odwoływania się do kursor.DEALLOCATE usuwa skojarzenie między kursor i Zmienna nazwy lub kursor kursor .Jeśli nazwa lub zmienna jest ostatnim odwołującym się kursor, dealokowane kursor i wszystkie zasoby używane przez kursor są zwalniane.Blokada przewijania używane do ochrony izolacji pobiera są zwalniane na DEALLOCATE.Używane do ochrony aktualizacje, w tym pozycjonowane aktualizacje dokonane przez kursorblokady transakcji są przechowywane aż do zakończenia transakcji.

instrukcja DECLARE CURSOR przydziela i kojarzy kursor z nazwa kursor .

DECLARE abc SCROLL CURSOR FOR
SELECT * FROM Person.Person;

Po nazwa kursor jest skojarzony z kursor, nie można użyć nazwy innej kursor ten sam zakres (szablon GLOBALNY lub lokalny) do momentu cofnięciu przydziału tego kursor .

Zmienna kursor jest skojarzony z kursor za pomocą jednej z dwóch metod:

  • Wg nazwy przy użyciu zestawu instrukcja stanowiąca kursor do zmiennej kursor .

    DECLARE @MyCrsrRef CURSOR
    SET @MyCrsrRef = abc
    
  • kursor można także tworzyć i skojarzone ze zmienną bez konieczności zdefiniowana nazwa kursor .

    DECLARE @MyCursor CURSOR
    SET @MyCursor = CURSOR LOCAL SCROLL FOR
    SELECT * FROM Person.Person;
    

DEALLOCATE @cursor_variable_name instrukcja usuwa tylko odwołanie zmiennej nazwanej kursor.Zmienna nie cofniętych przydziałów, dopóki nie wykracza poza zakres na zakończenie partia, procedura składowanalub wyzwalacza.Po DEALLOCATE @cursor_variable_name instrukcjazmiennej można skojarzyć z innego kursor za pomocą zestawu instrukcja.

USE AdventureWorks2008R2;
GO

DECLARE @MyCursor CURSOR
SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM Sales.SalesPerson;

DEALLOCATE @MyCursor;

SET @MyCursor = CURSOR LOCAL SCROLL FOR
SELECT * FROM Sales.SalesTerritory;
GO

Zmienna kursor nie musi jawnie przydzielenia.Zmienna niejawnie dealokowane wtedy, gdy wykracza poza zakres.

Uprawnienia

DEALLOCATE, domyślne uprawnienia do prawidłowego użytkownika.

Przykłady

Poniższy skrypt pokazuje, jak kursory pozostają do nazwiska lub cofniętych przydziałów zmiennej odwołanie się do nich.

USE AdventureWorks2008R2;
GO
-- Create and open a global named cursor that
-- is visible outside the batch.
DECLARE abc CURSOR GLOBAL SCROLL FOR
SELECT * FROM Sales.SalesPerson;
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 Sales.SalesTerritory;
-- The following statement deallocates the cursor
-- because no other variables reference it.
DEALLOCATE @MyCursor;
GO