sp_cursor_list (Transact-SQL)
Informa de los atributos de los cursores del servidor abiertos actualmente para la conexión.
Sintaxis
sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT
, [ @cursor_scope = ] cursor_scope
[;]
Argumentos
[ @cursor_return = ] cursor_variable_nameOUTPUT
Es el nombre de una variable de cursor declarada. cursor_variable_name es de tipo cursor y no tiene ningún valor predeterminado. El cursor es desplazable, dinámico y de solo lectura.[ @cursor_scope = ] cursor_scope
Especifica el nivel de cursores que se incluirán en el informe. cursor_scope es de tipo int, no tiene ningún valor predeterminado y puede ser uno de estos valores.Valor
Descripción
1
Informa de todos los cursores locales.
2
Informa de todos los cursores globales.
3
Informa de los cursores locales y globales.
Valores de código de retorno
Ninguno
Cursores devueltos
sp_cursor_list devuelve su informe como un parámetro de salida del cursor de Transact-SQL, no como un conjunto de resultados. Esto permite a los lotes, procedimientos almacenados y desencadenadores de Transact-SQL trabajar con la salida de fila en fila. También significa que no se puede llamar al procedimiento directamente desde funciones de API de base de datos. El parámetro de salida de tipo cursor debe estar enlazado a una variable del programa, pero las API de base de datos no admiten el enlace de parámetros o variables de cursor.
Éste es el formato del cursor devuelto por sp_cursor_list. El formato del cursor es el mismo que el que devuelve sp_describe_cursor.
Nombre de columna |
Tipo de datos |
Descripción |
---|---|---|
reference_name |
sysname |
El nombre que se utiliza para hacer referencia al cursor. Si la referencia al cursor se realizó utilizando el nombre dado en una instrucción DECLARE CURSOR, el nombre de referencia es el mismo que el nombre del cursor. Si la referencia al cursor se realizó a través de una variable, el nombre de la referencia es el de la variable de cursor. |
cursor_name |
sysname |
El nombre del cursor desde una instrucción DECLARE CURSOR. En SQL Server, si el cursor se creó estableciendo una variable de cursor como un cursor, cursor_name devuelve el nombre de la variable de cursor. En las versiones anteriores, esta columna de salida devuelve un nombre generado por el sistema. |
cursor_scope |
smallint |
1 = LOCAL 2 = GLOBAL |
status |
smallint |
Los mismos valores de los que informó la función del sistema CURSOR_STATUS: 1 = El cursor al que hace referencia el nombre del cursor o ?la variable está abierto. Si se trata de un cursor que no distingue, estático o de conjunto de claves, el conjunto de resultados tiene una fila, como mínimo. Si el cursor es dinámico, el conjunto de resultados tiene cero o más filas. 0 = El cursor al que hace referencia el nombre del cursor o la variable está abierto pero no tiene filas. Los cursores dinámicos nunca devuelven este valor. -1 = El cursor al que hace referencia el nombre del cursor o la variable está cerrado. -2 = Se aplica solo a variables de cursor. No hay ningún cursor asignado a la variable. Posiblemente, un parámetro OUTPUT asignó un cursor a la variable pero el procedimiento almacenado cerró el cursor antes de devolver resultados. -3 = No existe un cursor o variable de cursor con el nombre especificado, o la variable del cursor no tiene todavía un cursor asignado. |
model |
smallint |
1 = Sin distinción (o estático) 2 = Conjunto de claves 3 = Dinámico 4 = Avance rápido |
concurrency |
smallint |
1 = Solo lectura 2 = Bloqueos de desplazamiento 3 = Optimista |
scrollable |
smallint |
0 = Solo avance 1 = Desplazable |
open_status |
smallint |
0 = Cerrado 1 = Abierto |
cursor_rows |
int |
El número de filas certificadas en el conjunto de resultados. Para obtener más información, vea @@CURSOR_ROWS. |
fetch_status |
smallint |
El estado de la última captura de este cursor. Para obtener más información, vea @@FETCH_STATUS: 0 = Captura correcta. -1 = Error en la captura o se sobrepasaron los límites del cursor -2 = Falta la fila solicitada. -9 = No se registró ninguna captura en el cursor. |
column_count |
smallint |
El número de columnas del conjunto de resultados del cursor. |
row_count |
smallint |
El número de filas afectadas por la última operación del cursor. Para obtener más información, vea @@ROWCOUNT. |
last_operation |
smallint |
La última operación realizada en el cursor: 0 = No se realizó ninguna operación en el cursor. 1 = OPEN 2 = FETCH 3 = INSERT 4 = UPDATE 5 = DELETE 6 = CLOSE 7 = DEALLOCATE |
cursor_handle |
int |
Un valor único que identifica el cursor dentro del ámbito del servidor. |
Comentarios
sp_cursor_list presenta una lista de los actuales cursores de servidor abiertos por la conexión y describe los atributos globales de cada cursor, como por ejemplo, las posibilidades de desplazamiento y actualización del mismo. sp_cursor_list enumera los cursores siguientes:
Cursores de servidor Transact-SQL.
Cursores de servidor de API abiertos por una aplicación ODBC que, a continuación, llamó a SQLSetCursorName para denominar al cursor.
Utilice sp_describe_cursor_columns para obtener una descripción de los atributos del conjunto de resultados devuelto por el cursor. Utilice sp_describe_cursor_tables para obtener un informe de las tablas base a las que hace referencia el cursor. sp_describe_cursor especifica la misma información que sp_cursor_list, pero solo para el cursor especificado.
Permisos
De forma predeterminada, los permisos de ejecución corresponden al rol public.
Ejemplos
En el ejemplo siguiente se abre un cursor global y se utiliza sp_cursor_list para obtener un informe de los atributos del cursor.
USE AdventureWorks2008R2;
GO
-- Declare and open a keyset-driven cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';
OPEN abc;
-- Declare a cursor variable to hold the cursor output variable
-- from sp_cursor_list.
DECLARE @Report CURSOR;
-- Execute sp_cursor_list into the cursor variable.
EXEC master.dbo.sp_cursor_list @cursor_return = @Report OUTPUT,
@cursor_scope = 2;
-- Fetch all the rows from the sp_cursor_list output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT from @Report;
END
-- Close and deallocate the cursor from sp_cursor_list.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO