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.
Convenciones 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