Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Usuwa odwołanie do kursora. Po cofnięciu przydziału ostatniego odwołania kursora struktury danych składające się z kursora są zwalniane przez program Microsoft SQL Server.
Transact-SQL konwencje składni
Syntax
DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }
Arguments
cursor_name
To nazwa już zadeklarowanego kursora. Jeśli zarówno globalny, jak i lokalny kursor istnieje z cursor_name jako ich nazwa, cursor_name odnosi się do kursora globalnego, jeśli GLOBAL jest określony i do kursora lokalnego, jeśli GLOBAL nie zostanie określony.
@
cursor_variable_name
To nazwa zmiennej kursora .
@
cursor_variable_name musi być kursorem typu.
Remarks
Instrukcje działające na kursorach używają nazwy kursora lub zmiennej kursora, aby odwoływać się do kursora.
DEALLOCATE usuwa skojarzenie między kursorem a nazwą kursora lub zmienną kursora. Jeśli nazwa lub zmienna jest ostatnim odwołującym się do kursora, kursor zostanie cofnięty, a wszystkie zasoby używane przez kursor zostaną zwolnione. Blokady przewijania używane do ochrony izolacji pobierania są zwalniane pod adresem DEALLOCATE. Blokady transakcji używane do ochrony aktualizacji, w tym aktualizacji umieszczonych za pośrednictwem kursora, są przechowywane do końca transakcji.
Instrukcja DECLARE CURSOR przydziela i kojarzy kursor z nazwą kursora.
DECLARE abc SCROLL CURSOR FOR
SELECT * FROM Person.Person;
Po skojarzeniu nazwy kursora z kursorem nie można użyć nazwy dla innego kursora tego samego zakresu (globalnego lub lokalnego), dopóki ten kursor nie zostanie cofnięty.
Zmienna kursora jest skojarzona z kursorem przy użyciu jednej z dwóch metod:
Przy użyciu instrukcji ,
SETktóra ustawia kursor na zmienną kursora.DECLARE @MyCrsrRef CURSOR; SET @MyCrsrRef = abc;Kursor można również utworzyć i skojarzyć ze zmienną bez zdefiniowanej nazwy kursora.
DECLARE @MyCursor CURSOR; SET @MyCursor = CURSOR LOCAL SCROLL FOR SELECT * FROM Person.Person;
Instrukcja DEALLOCATE <@cursor_variable_name> usuwa tylko odwołanie do nazwanej zmiennej do kursora. Zmienna nie zostanie cofnięto przydziału, dopóki nie przekroczy zakresu na końcu partii, procedury składowanej lub wyzwalacza. Po instrukcji zmienna DEALLOCATE <@cursor_variable_name> może być skojarzona z innym kursorem przy użyciu instrukcji SET.
USE AdventureWorks2022;
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 kursora nie musi być jawnie cofnięto przydziału. Zmienna jest niejawnie cofnięto przydział, gdy wykracza poza zakres.
Permissions
Uprawnienia domyślne dla DEALLOCATE dowolnego prawidłowego użytkownika.
Examples
Poniższy skrypt pokazuje, jak kursory są utrwalane do momentu, gdy nazwisko lub do momentu cofnięcia przydziału zmiennej odwołującej się do nich.
USE AdventureWorks2022;
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
Zobacz też
ZAMKNIJ (Transact-SQL)
Cursors
DECLARE @local_variable (Transact-SQL)
PRZYNIEŚ (Transact-SQL)
OTWÓRZ (Transact-SQL)