Compartir a través de


sp_cursor_list (Transact-SQL)

Se aplica a: SQL Server

Informa de los atributos de los cursores del servidor abiertos actualmente para la conexión.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_cursor_list
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_scope = ] cursor_scope
[ ; ]

Argumentos

[ @cursor_return = ] cursor_return OUTPUT

Nombre de una variable de cursor declarada. @cursor_return es un parámetro OUTPUT de tipo CURSOR. El cursor es un cursor desplazable, dinámico y de solo lectura.

[ @cursor_scope = ] cursor_scope

Especifica el nivel de los cursores que se notificarán. @cursor_scope es int, sin 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 de cursor de Transact-SQL, no como un conjunto de resultados. Esto permite que los lotes, los procedimientos almacenados y los desencadenadores de Transact-SQL funcionen con la salida de una fila a la vez. También significa que no se puede llamar al procedimiento directamente desde las funciones de API de base de datos. El parámetro de salida del cursor debe enlazarse a una variable de programa, pero las API de base de datos no admiten parámetros de cursor de enlace ni variables.

Este es el formato del cursor devuelto por sp_cursor_list. El formato del cursor es el mismo que el formato devuelto por sp_describe_cursor.

Nombre de la 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ó a través del nombre proporcionado en una DECLARE CURSOR instrucción , 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 Nombre del cursor de una DECLARE CURSOR instrucción. En SQL Server, si el cursor se creó estableciendo una variable de cursor en un cursor, cursor_name devuelve el nombre de la variable de cursor. En 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 notificados por la función del CURSOR_STATUS sistema:

1 = El cursor al que hace referencia el nombre del cursor o la variable está abierto. Si el cursor no distingue, estática o conjunto de claves, es al menos una fila. 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 se cierra.

-2 = Solo se aplica a las variables de cursor. No hay ningún cursor asignado a la variable. Posiblemente, un OUTPUT parámetro asignó un cursor a la variable, pero el procedimiento almacenado cerró el cursor antes de devolverlo.

-3 = No existe una variable de cursor o cursor con el nombre especificado o la variable de cursor no tiene asignado un cursor.
model smallint 1 = No distingue (o estática)
2 = Conjunto de claves
3 = Dinámico
4= Inserción rápida
concurrency smallint 1 = Solo lectura
2 = Bloqueos de desplazamiento
3 = Optimista
scrollable smallint 0 = Solo reenvío
1 = Desplazable
open_status smallint 0 = Cerrado
1 = Abrir
cursor_rows int El número de filas certificadas en el conjunto de resultados. Para obtener más información, consulte @@CURSOR_ROWS.
fetch_status smallint El estado de la última captura de este cursor. Para obtener más información, consulte @@FETCH_STATUS:

0 = Captura correcta.
-1 = Error de captura o está más allá de los límites del cursor.
-2 = Falta la fila solicitada.
-9 = No se ha producido 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, consulte @@ROWCOUNT.
last_operation smallint La última operación realizada en el cursor:

0 = No se realizaron operaciones 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 genera una lista de los cursores de servidor actuales abiertos por la conexión y describe los atributos globales para cada cursor, como la capacidad de desplazamiento y la portabilidad del cursor. Los cursores enumerados por sp_cursor_list incluyen:

  • Cursores de Transact-SQL Server.

  • Cursores del servidor de API abiertos por una aplicación ODBC a la que se llama SQLSetCursorName para asignar un nombre al cursor.

Use sp_describe_cursor_columns para obtener una descripción de los atributos del conjunto de resultados devuelto por el cursor. Use sp_describe_cursor_tables para un informe de las tablas base a las que hace referencia el cursor. sp_describe_cursor informa de la misma información que sp_cursor_list, pero solo para un 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 AdventureWorks2022;
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