Compartir a través de


sp_describe_cursor_tables (Transact-SQL)

Se aplica a: SQL Server

Informa acerca de los objetos o las tablas base a las que hace referencia un cursor de servidor.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_describe_cursor_tables
    [ @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 cursor OUTPUT, sin ningún valor predeterminado, y no debe asociarse con ningún cursor en el momento sp_describe_cursor_tables 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 del que se informa está especificado con 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'

Cuando @cursor_source es , @cursor_identity es el nombre de un cursor creado por una DECLARE CURSOR instrucción que tiene la palabra clave o que tiene LOCALcomo LOCAL valor predeterminado . local

Cuando @cursor_source es , @cursor_identity es el nombre de un cursor creado por una DECLARE CURSOR instrucción que tiene la palabra clave o que tiene GLOBALcomo GLOBAL valor predeterminado . global @cursor_identity también puede ser el nombre de un cursor del servidor de API abierto por una aplicación ODBC que, a continuación, denomina el cursor llamando a SQLSetCursorName.

Cuando @cursor_source es variable, @cursor_identity es el nombre de una variable de cursor asociada a un cursor abierto.

@cursor_identity es nvarchar(128), sin ningún valor predeterminado.

Valores de código de retorno

Ninguno.

Cursores devueltos

sp_describe_cursor_tablesencapsula su informe como un parámetro de salida de cursor de Transact-SQL. 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. El parámetro de salida del cursor debe enlazarse a una variable de programa, pero las API no admiten parámetros de cursor de enlace ni variables.

En la tabla siguiente se muestra el formato del cursor devuelto por sp_describe_cursor_tables.

Nombre de la columna Tipo de datos Descripción
table_owner sysname Id. de usuario del propietario de la tabla.
table_name sysname Nombre del objeto o tabla base. En SQL Server, los cursores de servidor siempre devuelven el objeto especificado por el usuario, no las tablas base.
optimizer_hint smallint Mapa de bits formado por una o varias de las siguientes opciones:

1 = Bloqueo de nivel de fila (ROWLOCK)
4 = Bloqueo de nivel de página (PAGELOCK)
8 = Bloqueo de tabla (TABLOCK)
16 = Bloqueo de tabla exclusivo (TABLOCKX)
32 = Bloqueo de actualización (UPDLOCK)
64 = Sin bloqueo (NOLOCK)
128 = Opción rápida de primera fila (FASTFIRST)
4096 = Semántica repetible de lectura cuando se usa con DECLARE CURSOR (HOLDLOCK)

Cuando se especifican varias opciones, el sistema utiliza la más restrictiva. Sin embargo, sp_describe_cursor_tables muestra las marcas especificadas en la consulta.
lock_type smallint Tipo de bloqueo de desplazamiento requerido explícita o implícitamente para cada tabla base de este cursor. El valor puede ser una de las siguientes opciones:

0 = Ninguna
1 = Compartido
3 = Actualización
server_name sysname, que acepta valores NULL Nombre del servidor vinculado en el que reside la tabla. NULL cuando OPENQUERY se usan o OPENROWSET .
objectid int Id. de objeto de la tabla. 0 cuando OPENQUERY se usan o OPENROWSET .
dbid int Identificador de la base de datos en la que reside la tabla. 0 cuando OPENQUERY se usan o OPENROWSET .
dbname sysname, que acepta valores NULL Nombre de la base de datos en la que reside la tabla. NULL cuando OPENQUERY se usan o OPENROWSET .

Comentarios

sp_describe_cursor_tables describe las tablas base a las que hace referencia un cursor de servidor. Para obtener una descripción de los atributos del conjunto de resultados devuelto por el cursor, use sp_describe_cursor_columns. Para obtener una descripción de las características globales del cursor, como la capacidad de desplazamiento y la portabilidad, use sp_describe_cursor. Para obtener un informe de los cursores de Transact-SQL Server que están visibles en la conexión, use sp_cursor_list.

Permisos

Debe pertenecer al rol public .

Ejemplos

En el ejemplo siguiente se abre un cursor global y se usa sp_describe_cursor_tables para informar sobre las tablas a las que hace referencia el cursor.

USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';

OPEN abc;
GO
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_tables.
DECLARE @Report CURSOR;

-- Execute sp_describe_cursor_tables into the cursor variable.
EXEC master.dbo.sp_describe_cursor_tables
    @cursor_return = @Report OUTPUT,
    @cursor_source = N'global',
    @cursor_identity = N'abc';

-- Fetch all the rows from the sp_describe_cursor_tables 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_tables.
CLOSE @Report;
DEALLOCATE @Report;
GO

-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO