DEALLOCATE (Transact-SQL)

Quita una referencia a un cursor. Cuando se ha quitado la última referencia al cursor, Microsoft SQL Server libera las estructuras de datos que componen el cursor.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

cursor_name

Es el nombre de un cursor ya declarado. Si existen un cursor global y otro local denominados cursor_name, cursor_name hace referencia al cursor global si se especifica GLOBAL y al cursor local si no se especifica GLOBAL.

@cursor_variable_name

Es el nombre de una variable cursor. @cursor_variable_name debe ser de tipo cursor.

Notas

Las instrucciones que realizan operaciones sobre cursores utilizan un nombre de cursor o una variable de cursor para hacer referencia al cursor. DEALLOCATE quita la asociación existente entre un cursor y el nombre del cursor o la variable de cursor. Si un nombre o variable es el último que hace referencia a un cursor, se quita el cursor y se liberan los recursos que utiliza. Los bloqueos de desplazamiento utilizados para proteger el aislamiento de las recuperaciones se liberan en DEALLOCATE. Los bloqueos de transacciones utilizados para proteger las actualizaciones, incluidas las actualizaciones posicionadas creadas a través del cursor, se mantienen hasta el final de la transacción.

La instrucción DECLARE CURSOR asigna y asocia un cursor a un nombre de cursor.

DECLARE abc SCROLL CURSOR FOR
SELECT * FROM Person.Contact

Después de asociar un nombre de cursor a un cursor, ningún otro cursor del mismo ámbito (GLOBAL o LOCAL) puede utilizar el nombre hasta que se haya cancelado la asignación al cursor.

Una variable de cursor se puede asociar a un cursor mediante uno de estos dos métodos:

  • Por nombre con una instrucción SET que asocia un cursor a una variable de cursor.

    DECLARE @MyCrsrRef CURSOR
    SET @MyCrsrRef = abc
    
  • También se puede crear y asociar un cursor a una variable sin necesidad de definir un nombre de cursor.

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

La instrucción DEALLOCATE @cursor_variable_name quita sólo la referencia de la variable mencionada al cursor. No se cancela la asignación de la variable hasta que sale de ámbito al final del proceso por lotes, procedimiento almacenado o desencadenador. Después de una instrucción DEALLOCATE @cursor_variable_name, se puede asociar la variable a otro cursor mediante la instrucción SET.

USE AdventureWorks
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

No es necesario cancelar explícitamente la asignación de una variable de cursor. La asignación de la variable se cancela implícitamente cuando sale de ámbito.

Permisos

Los permisos para utilizar DEALLOCATE pertenecen de manera predeterminada a cualquier usuario válido.

Ejemplos

Esta secuencia de comandos muestra cómo los cursores se mantienen hasta que se ha cancelado la asignación del último nombre o variable que hace referencia a ellos.

USE AdventureWorks
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

Vea también

Referencia

CLOSE (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
FETCH (Transact-SQL)
OPEN (Transact-SQL)

Otros recursos

Cursores (motor de base de datos)

Ayuda e información

Obtener ayuda sobre SQL Server 2005