Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Odebere odkaz kurzoru. Při uvolnění posledního odkazu kurzoru jsou datové struktury, které tvoří kurzor, uvolněny microsoft SQL Serverem.
Syntax
DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }
Arguments
cursor_name
Je název již deklarovaného kurzoru. Pokud jako název existuje globální i místní kurzor s cursor_name , cursor_name odkazuje na globální kurzor, pokud GLOBAL je zadán, a na místní kurzor, pokud GLOBAL není zadán.
@
cursor_variable_name
Je název proměnné kurzoru .
@
cursor_variable_name musí být kurzor typu.
Remarks
Příkazy, které pracují s kurzory, používají buď název kurzoru, nebo proměnnou kurzoru k odkazování na kurzor.
DEALLOCATE odebere přidružení mezi kurzorem a názvem kurzoru nebo proměnnou kurzoru. Pokud je název nebo proměnná poslední odkazující na kurzor, kurzor se uvolní a uvolní se všechny prostředky používané kurzorem. Posuvné zámky používané k ochraně izolace načítání jsou uvolněny na DEALLOCATE. Zámky transakcí používané k ochraně aktualizací, včetně umístěných aktualizací provedených kurzorem, se uchovávají až do konce transakce.
Příkaz DECLARE CURSOR přidělí a přidruží kurzor k názvu kurzoru.
DECLARE abc SCROLL CURSOR FOR
SELECT * FROM Person.Person;
Po přidružení názvu kurzoru k kurzoru nelze tento název použít pro jiný kurzor stejného oboru (globální nebo místní), dokud nebude tento kurzor uvolněn.
Proměnná kurzoru je přidružená k kurzoru pomocí jedné ze dvou metod:
Pomocí názvu pomocí
SETpříkazu, který nastaví kurzor na proměnnou kurzoru.DECLARE @MyCrsrRef CURSOR; SET @MyCrsrRef = abc;Kurzor lze také vytvořit a přidružit k proměnné, aniž by byl definován název kurzoru.
DECLARE @MyCursor CURSOR; SET @MyCursor = CURSOR LOCAL SCROLL FOR SELECT * FROM Person.Person;
Příkaz DEALLOCATE <@cursor_variable_name> odebere pouze odkaz pojmenované proměnné na kurzor. Proměnná není uvolněna, dokud nepřejde mimo rozsah na konci dávky, uložené procedury nebo triggeru.
DEALLOCATE <@cursor_variable_name> Po příkazu může být proměnná přidružena k jinému kurzoru pomocí příkazu 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
Proměnná kurzoru nemusí být explicitně uvolněna. Proměnná je implicitně uvolněna, když přejde mimo rozsah.
Permissions
Oprávnění pro výchozí nastavení DEALLOCATE pro libovolného platného uživatele
Examples
Následující skript ukazuje, jak kurzory potrvají až do posledního jména nebo do doby, než je proměnná odkazující na ně uvolněna.
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
Viz také
ZAVŘÍT (Transact-SQL)
Cursors
DECLARE @local_variable (Transact-SQL)
APORTUJ (Transact-SQL)
OTEVŘÍT (Transact-SQL)