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.
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
See Also