(Transact-sql) Kaldır

Bir imleç başvuruyu kaldırır. Ne zaman son imleç başvurusu kaldırıldı, imleci oluşan veri yapıları tarafından yayımlanan Microsoft   SQL Server.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

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

Bağımsız değişkenler

  • cursor_name
    Zaten bildirilmiş bir imleç adıdır. Hem global hem de bir yerel imleç ile varsa cursor_namekendi adıyla cursor_nameglobal belirtilmezse, global belirtilmezse küresel imleç ve Yerel imleç başvurur.

  • @cursor\_variable\_name
    Adı bir cursordeğişkeni. @cursor\_variable\_name türünde olmalıdır cursor.

Açıklamalar

İmleçler üzerinde faaliyet gösteren tablolar imleç adı veya imleç değişken imleci başvurmak için kullanın. deallocate imleç adı veya imleç değişken bir imleç arasındaki ilişkiyi kaldırır. Bir ad ya da değişken sonuncusu ise imleç başvuran imleç kaldırıldı ve imleç tarafından kullanılan tüm kaynakları serbest. Kaydırma kilitleri fetches izolasyonu korumak için kullanılan deallocate serbest. İmleci yoluyla yapılan konumlandırılmış güncelleştirmeler dahil olmak üzere güncelleştirmeleri, korumak için kullanılan işlem kilitleri, işlemin sonuna kadar tutulur.

declare cursor deyimi ayırır ve bir imleç imleç adı ile ilişkilendirir.

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

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

Imleç adı imleç ile ilişkili sonra adı aynı kapsam (genel veya yerel) başka bir imleç için kullanılamaz kadar bu imleç kaldırıldı.

Bir imleç değişken bir imleç iki yöntemden birini kullanarak ile ilişkilidir:

  • set deyimi kullanarak adıyla bir imleç değişken bir imleç ayarlar.

    DECLARE @MyCrsrRef CURSOR
    SET @MyCrsrRef = abc
    
    DECLARE @MyCrsrRef CURSOR
    SET @MyCrsrRef = abc
    
  • Bir imleç da oluşturulabilir ve tanımlanan imleç adı kalmadan bir değişkenle ilişkilendirilmiş.

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

Bir deallocate @cursor\_variable\_namedeyimi yalnızca başvuru adlandırılmış değişken imleci kaldırır. Toplu iş, saklı yordam veya tetikleyiciyi sonunda kapsam dışına gidiyor kadar değişken kaldırıldı değil. Sonra bir deallocate @cursor\_variable\_namedeyimi değişkeni ilişkilendirilebilir set deyimi kullanarak başka bir imleç ile.

USE AdventureWorks2012;
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

USE AdventureWorks2012;
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

Imleç değişkeni açıkça kaldırıldı zorunda değildir. Kapsam dışına gittiğinde değişken örtülü kaldırıldı.

İzinler

deallocate geçerli bir kullanıcı için varsayılan izinleri.

Örnekler

Aşağıdaki komut dosyası, ne kadar soyadı veya bunlara değişken kaldırıldı kadar imleçler inat gösterir.

USE AdventureWorks2012;
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

USE AdventureWorks2012;
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.

Başvuru

Kapat (Transact-sql)

DECLARE @local\_variable (Transact-SQL)

fetch (Transact-sql)

OPEN (Transact-sql)

Kavramlar

İmleçler