Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Förhandsversion av Microsoft Fabric
Tar bort en markörreferens. När den sista markörens referens frigörs släpps datastrukturerna som består av markören av Microsoft SQL Server.
Transact-SQL syntaxkonventioner
Syntax
DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }
Arguments
cursor_name
Är namnet på en redan deklarerad markör. Om både en global och en lokal markör finns med cursor_name som namn refererar cursor_name till den globala markören om GLOBAL den har angetts och till den lokala markören om GLOBAL den inte har angetts.
@
cursor_variable_name
Är namnet på en markörvariabel .
@
cursor_variable_name måste vara av typen markör.
Remarks
Instruktioner som används på markörer använder antingen ett markörnamn eller en markörvariabel för att referera till markören.
DEALLOCATE tar bort associationen mellan en markör och markörens namn eller markörvariabel. Om ett namn eller en variabel är den sista som refererar till markören frigörs markören och alla resurser som används av markören frigörs. Rullningslås som används för att skydda isoleringen av hämtningar frigörs på DEALLOCATE. Transaktionslås som används för att skydda uppdateringar, inklusive placerade uppdateringar som görs via markören, hålls kvar till slutet av transaktionen.
Instruktionen DECLARE CURSOR allokerar och associerar en markör med ett markörnamn.
DECLARE abc SCROLL CURSOR FOR
SELECT * FROM Person.Person;
När ett markörnamn har associerats med en markör kan namnet inte användas för en annan markör med samma omfång (globalt eller lokalt) förrän markören har frigjorts.
En markörvariabel associeras med en markör med någon av två metoder:
Efter namn med hjälp av en
SETinstruktion som anger en markör till en markörvariabel.DECLARE @MyCrsrRef CURSOR; SET @MyCrsrRef = abc;En markör kan också skapas och associeras med en variabel utan att ett markörnamn har definierats.
DECLARE @MyCursor CURSOR; SET @MyCursor = CURSOR LOCAL SCROLL FOR SELECT * FROM Person.Person;
En DEALLOCATE <@cursor_variable_name> instruktion tar bara bort referensen för den namngivna variabeln till markören. Variabeln frigörs inte förrän den hamnar utanför omfånget i slutet av batchen, den lagrade proceduren eller utlösaren. Efter en DEALLOCATE <@cursor_variable_name> instruktion kan variabeln associeras med en annan markör med hjälp av SET-instruktionen.
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
En markörvariabel behöver inte uttryckligen frigöras. Variabeln frigörs implicit när den hamnar utanför omfånget.
Permissions
Behörigheter för DEALLOCATE standard för alla giltiga användare.
Examples
Följande skript visar hur markörer bevaras tills efternamnet eller tills variabeln som refererar till dem har frigjorts.
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
See Also
CLOSE (Transact-SQL)
Cursors
DECLARE @local_variable (Transact-SQL)
FETCH (Transact-SQL)
OPEN (Transact-SQL)