Compartir a través de


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 siguiente ejemplo se crea un procedimiento denominado lake_list y se utiliza el resultado de la ejecución de lake_list como comprobación de CURSOR_STATUS.

[!NOTA] El ejemplo siguiente depende de un procedimiento denominado check_authority, que no se ha creado.

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'lake_list' AND type = 'P')
   DROP PROCEDURE lake_list
GO
CREATE PROCEDURE lake_list
   ( @region varchar(30),
     @size integer,
     @lake_list_cursor CURSOR VARYING OUTPUT )
AS 
BEGIN
   DECLARE @ok SMALLINT
   EXECUTE check_authority @region, username, @ok OUTPUT
   IF @ok = 1
      BEGIN
      SET @lake_list_cursor = CURSOR LOCAL SCROLL FOR
         SELECT name, lat, long, size, boat_launch, cost
         FROM lake_inventory
         WHERE locale = @region AND area >= @size
         ORDER BY name
      OPEN @lake_list_cursor
      END
END
DECLARE @my_lakes_cursor CURSOR
DECLARE @my_region char(30)
SET @my_region = 'Northern Ontario'
EXECUTE lake_list @my_region, 500, @my_lakes_cursor OUTPUT
IF Cursor_Status('variable', '@my_lakes_cursor') <= 0
   BEGIN
   /* Some code to tell the user that there is no list of
   Lakes. */
   END
ELSE
   BEGIN
      FETCH @my_lakes_cursor INTO -- Destination here
      -- Continue with other code here.
END

Vea también

Referencia

Funciones del cursor (Transact-SQL)
Tipos de datos (Transact-SQL)

Otros recursos

Usar identificadores como nombres de objeto

Ayuda e información

Obtener ayuda sobre SQL Server 2005