CURSOR_STATUS (Transact-SQL)

Una función escalar que permite a quien llama a un procedimiento almacenado determinar si el procedimiento ha devuelto un cursor y el conjunto de resultados de un parámetro determinado.

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

Sintaxis

CURSOR_STATUS 
          (
               { 'local' , 'cursor_name' } 
          | { 'global' , 'cursor_name' } 
          | { 'variable' , 'cursor_variable' } 
          )

Argumentos

  • 'local'
    Especifica una constante que indica que el origen del cursor es un nombre de cursor local.

  • 'cursor_name'
    Es el nombre del cursor. Un nombre de cursor debe ajustarse a las reglas para los identificadores.

  • 'global'
    Especifica una constante que indica que el origen del cursor es un nombre de cursor global.

  • 'variable'
    Especifica una constante que indica que el origen del cursor es una variable local.

  • 'cursor_variable'
    Es el nombre de la variable de cursor. Una variable de cursor debe definirse mediante el tipo de datos cursor.

Tipos de valor devueltos

smallint

Valor devuelto

Nombre de cursor

Variable de cursor

1

El conjunto de resultados del cursor tiene al menos una fila.

Para los cursores INSENSITIVE y de conjunto de claves, el conjunto de resultados tiene al menos una fila.

Para los cursores dinámicos, el conjunto de resultados puede tener cero, una o más filas.

El cursor asignado a esta variable está abierto.

Para los cursores INSENSITIVE y de conjunto de claves, el conjunto de resultados tiene al menos una fila.

Para los cursores dinámicos, el conjunto de resultados puede tener cero, una o más filas.

0

El conjunto de resultados del cursor está vacío.*

El cursor asignado a esta variable está abierto, pero el conjunto de resultados está definitivamente vacío.*

-1

El cursor está cerrado.

El cursor asignado a esta variable está cerrado.

-2

No aplicable.

Puede ser:

El procedimiento llamado anteriormente no ha asignado ningún cursor a esta variable OUTPUT.

El procedimiento llamado anteriormente asignó un cursor a esta variable OUTPUT, pero se encontraba en un estado cerrado al terminar el procedimiento. Por tanto, se cancela la asignación del cursor y no se devuelve al procedimiento que hace la llamada.

No hay ningún cursor asignado a una variable declarada de cursor.

-3

No existe ningún cursor con el nombre indicado.

No existe una variable de cursor con el nombre indicado o, si existe, no tiene todavía ningún cursor asignado.

*Los cursores dinámicos no devuelven nunca este resultado.

Ejemplos

En el ejemplo siguiente, se usa la función CURSOR_STATUS para mostrar el estado de un cursor antes y después de abrirlo y cerrarlo.

CREATE TABLE #TMP
(
   ii int
)
GO

INSERT INTO #TMP(ii) VALUES(1)
INSERT INTO #TMP(ii) VALUES(2)
INSERT INTO #TMP(ii) VALUES(3)

GO

--Create a cursor.
DECLARE cur CURSOR
FOR SELECT * FROM #TMP

--Display the status of the cursor before and after opening
--closing the cursor.

SELECT CURSOR_STATUS('global','cur') AS 'After declare'
OPEN cur
SELECT CURSOR_STATUS('global','cur') AS 'After Open'
CLOSE cur
SELECT CURSOR_STATUS('global','cur') AS 'After Close'

--Remove the cursor.
DEALLOCATE cur

--Drop the table.
DROP TABLE #TMP

Éste es el conjunto de resultados.

After declare

---------------

-1

After Open

----------

1

After Close

-----------

-1