sp_describe_cursor (Transact-SQL)
Se aplica a: SQL Server
Notifica los atributos de un cursor de servidor.
Convenciones de sintaxis de Transact-SQL
Sintaxis
sp_describe_cursor
[ @cursor_return = ] cursor_return OUTPUT
, [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
, [ @cursor_identity = ] N'cursor_identity'
[ ; ]
Argumentos
[ @cursor_return = ] cursor_return OUTPUT
Nombre de una variable de cursor declarada para recibir la salida del cursor. @cursor_return es un parámetro OUTPUT de tipo int, sin ningún valor predeterminado y no debe asociarse con ningún cursor en el momento sp_describe_cursor
en que se llama. El cursor devuelto es un cursor desplazable, dinámico y de solo lectura.
[ @cursor_source = ] { N'local' | N'global' | N'cursor_source' }
Especifica si el cursor en el que se notifica se especifica mediante el nombre de un cursor local , un cursor global o una variable de cursor. @cursor_source es nvarchar(30), sin ningún valor predeterminado.
[ @cursor_identity = ] N'cursor_identity'
Nombre de un cursor creado por una DECLARE CURSOR
instrucción . @cursor_identity es nvarchar(128), sin ningún valor predeterminado.
Si el cursor tiene la palabra clave o tiene como
LOCAL
valor predeterminadoLOCAL
, @cursor_identity eslocal
.Si el cursor tiene la palabra clave o tiene como
GLOBAL
valor predeterminadoGLOBAL
, @cursor_identity esglobal
. @cursor_identity también puede ser el nombre de un cursor del servidor de API abierto por una aplicación ODBC y, a continuación, llamar aSQLSetCursorName
.De lo contrario, @cursor_identity es el nombre de una variable de cursor asociada a un cursor abierto.
Valores de código de retorno
Ninguno.
Cursores devueltos
sp_describe_cursor
encapsula su conjunto de resultados en un parámetro de salida de Transact-SQL cursor
. Esto permite que los lotes, los procedimientos almacenados y los desencadenadores de Transact-SQL funcionen con la salida de una fila a la vez. Esto también significa que no se puede llamar al procedimiento directamente desde las funciones de API de base de datos. El cursor
parámetro de salida debe enlazarse a una variable de programa, pero las API de base de datos no admiten parámetros de enlace cursor
ni variables.
En la tabla siguiente se muestra el formato del cursor que se devuelve mediante sp_describe_cursor
. El formato del cursor es el mismo que el formato devuelto mediante sp_cursor_list
.
Nombre de la columna | Tipo de datos | Descripción |
---|---|---|
reference_name |
sysname | Nombre que se utiliza para hacer referencia al cursor. Si la referencia al cursor se realizó a través del nombre especificado en una DECLARE CURSOR instrucción , el nombre de referencia es el mismo que el nombre del cursor. Si la referencia al cursor se hizo utilizando una variable, el nombre de referencia es el de la variable. |
cursor_name |
sysname | Nombre del cursor de una DECLARE CURSOR instrucción . 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 de SQL Server, esta columna de salida devuelve un nombre generado por el sistema. |
cursor_scope |
tinyint | 1 = LOCAL 2 = GLOBAL |
status |
int | 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 |
tinyint | 1 = No distingue (o estática)2 = Conjunto de claves3 = Dinámico4 = Inserción rápida |
concurrency |
tinyint | 1 = Solo lectura2 = Bloqueos de desplazamiento3 = Optimista |
scrollable |
tinyint | 0 = Solo reenvío1 = Desplazable |
open_status |
tinyint | 0 = Cerrado1 = Abrir |
cursor_rows |
decimal(10,0) | Número de filas certificadas en el conjunto de resultados. Para obtener más información, consulte @@CURSOR_ROWS. |
fetch_status |
smallint | 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 produjo ninguna captura en el cursor. |
column_count |
smallint | Número de columnas del conjunto de resultados del cursor. |
row_count |
decimal(10,0) | Número de filas afectadas por la última operación del cursor. Para obtener más información, consulte @@ROWCOUNT. |
last_operation |
tinyint | Ú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 | Valor único del cursor dentro del ámbito del servidor. |
Comentarios
sp_describe_cursor
describe los atributos que son globales para un cursor de servidor, como la capacidad de desplazarse y actualizar. 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. Para obtener un informe de los cursores de Transact-SQL Server visibles en la conexión, use sp_cursor_list
.
Una DECLARE CURSOR
instrucción puede solicitar un tipo de cursor que SQL Server no pueda admitir mediante la SELECT
instrucción contenida en .DECLARE CURSOR
SQL Server convierte implícitamente el cursor en un tipo que puede admitir mediante la SELECT
instrucción . Si TYPE_WARNING
se especifica en la DECLARE CURSOR
instrucción , SQL Server envía a la aplicación un mensaje informativo que se completó una conversión. sp_describe_cursor
A continuación, se puede llamar a para determinar el tipo de cursor que se ha implementado.
Permisos
Debe pertenecer al rol public .
Ejemplos
En el ejemplo siguiente se abre un cursor global y se utiliza sp_describe_cursor
para obtener un informe de los atributos del cursor.
USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;
OPEN abc;
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report CURSOR;
-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor
@cursor_return = @Report OUTPUT,
@cursor_source = N'global',
@cursor_identity = N'abc';
-- Fetch all the rows from the sp_describe_cursor output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT from @Report;
END
-- Close and deallocate the cursor from sp_describe_cursor.
CLOSE @Report;
DEALLOCATE @Report;
GO
-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO