Aracılığıyla paylaş


DEALLOCATE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

İmleç başvurularını kaldırır. Son imleç başvurusu serbest bırakıldığında, imleci oluşturan veri yapıları Microsoft SQL Server tarafından serbest bırakılır.

Transact-SQL söz dizimi kuralları

Syntax

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

Arguments

cursor_name
Zaten bildirilen bir imlecin adıdır. Hem genel hem de yerel imleç adında cursor_name varsa, cursor_name belirtilirse GLOBAL genel imleç ve belirtilmezse GLOBAL yerel imleç için başvurur.

@ cursor_variable_name
İmleç değişkeninin adıdır. @ cursor_variable_nameimleç türünde olmalıdır.

Remarks

İmleçler üzerinde çalışan deyimler, imleç adına başvurmak için bir imleç adı veya imleç değişkeni kullanır. DEALLOCATE bir imleç ile imleç adı veya imleç değişkeni arasındaki ilişkiyi kaldırır. bir ad veya değişken imleç başvuran son ise, imleç serbest bırakılır ve imleç tarafından kullanılan tüm kaynaklar serbest bırakılır. Getirmelerin yalıtımını korumak için kullanılan kaydırma kilitleri adresinde DEALLOCATEserbesttir. İmleç üzerinden yapılan konumlandırılmış güncelleştirmeler de dahil olmak üzere güncelleştirmeleri korumak için kullanılan işlem kilitleri, işlemin sonuna kadar tutulur.

deyimi DECLARE CURSOR , imleci bir imleç adıyla ayırır ve ilişkilendirir.

DECLARE abc SCROLL CURSOR FOR  
SELECT * FROM Person.Person;  

İmleç adı bir imleçle ilişkilendirildikten sonra, bu imleç serbest bırakılana kadar aynı kapsamdaki başka bir imleç için (genel veya yerel) ad kullanılamaz.

İmleç değişkeni, iki yöntemden biri kullanılarak bir imleç ile ilişkilendirilir:

  • İmleci imleç SET değişkenine ayarlayan bir deyimi kullanarak ada göre.

    DECLARE @MyCrsrRef CURSOR;  
    SET @MyCrsrRef = abc;  
    
  • İmleç, tanımlı bir imleç adı olmadan bir değişkenle de oluşturulabilir ve ilişkilendirilebilir.

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

Deyimi DEALLOCATE <@cursor_variable_name> yalnızca adlandırılmış değişkenin imleç başvurularını kaldırır. Değişken toplu iş, saklı yordam veya tetikleyicinin sonunda kapsamın dışına çıkana kadar serbest bırakılmaz. Deyiminden DEALLOCATE <@cursor_variable_name> sonra, değişken SET deyimi kullanılarak başka bir imleçle ilişkilendirilebilir.

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  

İmleç değişkeninin açıkça serbest bırakılması gerekmez. Değişken kapsamın dışına çıktığında örtük olarak serbest bırakılır.

Permissions

Geçerli bir kullanıcı için DEALLOCATE varsayılan izinler.

Examples

Aşağıdaki betik, imleçlerin soyadına kadar veya bunlara başvuran değişken serbest bırakılana kadar nasıl kalıcı olduğunu gösterir.

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  

Ayrıca Bkz.

CLOSE (Transact-SQL)
Cursors
DECLARE @local_variable (Transact-SQL)
GETIR (Transact-SQL)
AÇIK (Transact-SQL)