Udostępnij za pośrednictwem


DEALLOCATE (Transact-SQL)

Usuwa odwołanie kursor.When the last cursor reference is deallocated, the data structures comprising the cursor are released by Microsoft SQL Server.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • DODAJE WEBMETHOD
    Jest nazwą kursor już zadeklarowana.Jeśli istnieją globalnym i lokalnym kursor z cursor_name jak ich nazwy, cursor_name odnosi się do globalnego kursora, jeśli określono GLOBAL i lokalne kursora, jeżeli nie określono GLOBAL.

  • @ cursor_variable_name
    Jest to nazwa kursor zmiennej.@ cursor_variable_name musi być typu kursor.

Remarks

Przy użyciu zmiennej kursor albo nazwa kursor instrukcji, które działają na kursory odnoszą się do kursor.DEALLOCATE usuwa skojarzenie między kursor i Zmienna nazwy lub kursor kursora.Nazwa lub zmienna jest ostatnia z nich odwołują się do kursora, kursor jest dealokowane i wszystkie zasoby używane przez kursor są zwalniane.Blokady przewijania używane do ochrony izolacja pobiera są zwalniane na DEALLOCATE.Blokady transakcji używany do ochrony aktualizacji, w tym także aktualizacji pozycjonowane realizowana za kursor, są przechowywane do czasu zakończenia transakcji.

W instrukcja DECLARE CURSOR przydziela i kojarzy kursor o nazwie kursora.

DECLARE abc SCROLL CURSOR FOR
SELECT * FROM Person.Contact

Po nazwa kursora jest skojarzony z kursorem, nazwa nie może być użyty dla innego kursor tego samego zakres (GLOBAL lub LOCAL) do momentu ma został zdealokowany tego kursora.

Zmienna kursor jest skojarzony z kursorem przy użyciu jednej z dwóch metod:

  • Według nazw przy użyciu instrukcja zestaw, ustawia kursor do zmiennej kursora.

    DECLARE @MyCrsrRef CURSOR
    SET @MyCrsrRef = abc
    
  • Kursor może być także tworzone i skojarzonych z zmiennej bez potrzeby nazwa kursora, definicja.

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

DEALLOCATE @ cursor_variable_name instrukcja usuwa tylko odwołanie zmiennej nazwanej do kursor.Zmienna nie jest przydziałów do momentu jej wykracza poza zakres po zakończeniu partia, procedura przechowywana lub wyzwalacza.Po DEALLOCATE @ cursor_variable_name instrukcja, zmienna mogą być kojarzone z innym kursor za pomocą instrukcja zestaw.

USE AdventureWorks
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 ma być jawnie przydziałów.Zmienna jest niejawnie dealokowane wraz z nim poza zakresem.

Uprawnienia

Cofnij przydzielanie domyślne uprawnienia do dowolnego użytkownika jest nieprawidłowe.

Przykłady

Ten skrypt pokazuje, jak kursory pozostają do nazwiska lub dopóki nie ma już dealokowane zmiennej odwoływania się do nich.

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