sp_cursorprepexec (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure Synapse AnalyticsAnalytics Platform System (PDW)

Compila un plan para la instrucción de cursor enviada o lote. Después, crea y rellena el cursor. sp_cursorprepexec combina las funciones de sp_cursorprepare y sp_cursorexecute. Este procedimiento se invoca especificando ID = 5 en un paquete de flujo de datos tabular (TDS).

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
    [ , scrollopt [ , ccopt [ , rowcount ] ] ]
    [ , '@parameter_name [ , ...n ]' ]

Argumentos

identificador preparado

Identificador de identificador de identificador preparado generado por SQL Server. Se requiere el identificador preparado y devuelve int.

cursor

Identificador de cursor generado por SQL Server. cursor es un parámetro necesario que se debe proporcionar en todos los procedimientos posteriores que actúan sobre este cursor, por ejemplo, sp_cursorfetch.

params

Identifica instrucciones con parámetros. La definición de parámetros de las variables se sustituye por los marcadores de parámetro en la instrucción . los parámetros son un parámetro necesario que llama a un valor de entrada ntext, nchar o nvarchar .

Nota:

Use una cadena ntext como valor de entrada cuando la instrucción está parametrizada y el valor de scrollopt PARAMETERIZED_STMT es ON.

instrucción

Define el conjunto de resultados del cursor. El parámetro de instrucción es obligatorio y llama a un valor de entrada ntext, nchar o nvarchar .

Nota:

Las reglas para especificar el valor de instrucción son las mismas que para sp_cursoropen, con la excepción de que el tipo de datos de cadena de instruccióndebe ser ntext.

options

Parámetro opcional que devuelve una descripción de las columnas del conjunto de resultados del cursor. Las opciones requieren el siguiente valor de entrada int .

Value Descripción
0x0001 RETURN_METADATA

scrollopt

Opción de desplazamiento. scrollopt es un parámetro opcional que requiere uno de los siguientes valores de entrada int .

Value Descripción
0x0001 KEYSET
0x0002 DYNAMIC
0x0004 FORWARD_ONLY
0x0008 STATIC
0x10 FAST_FORWARD
0x1000 PARAMETERIZED_STMT
0x2000 AUTO_FETCH
0x4000 AUTO_CLOSE
0x8000 CHECK_ACCEPTED_TYPES
0x10000 KEYSET_ACCEPTABLE
0x20000 DYNAMIC_ACCEPTABLE
0x40000 FORWARD_ONLY_ACCEPTABLE
0x80000 STATIC_ACCEPTABLE
0x100000 FAST_FORWARD_ACCEPTABLE

Debido a la posibilidad de que la opción solicitada no sea adecuada para el cursor definido por instrucción, este parámetro actúa como entrada y salida. En tales casos, SQL Server asigna un tipo adecuado y modifica este valor.

ccopt

Opción de control de simultaneidad. ccopt es un parámetro opcional que requiere uno de los siguientes valores de entrada int .

Value Descripción
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (conocido anteriormente como LOCKCC)
0x0004 OPTIMISTA (anteriormente conocido como OPTCC)
0x0008 OPTIMISTIC (conocido anteriormente como OPTCCVAL)
0x2000 ALLOW_DIRECT
0x4000 UPDT_IN_PLACE
0x8000 CHECK_ACCEPTED_OPTS
0x10000 READ_ONLY_ACCEPTABLE
0x20000 SCROLL_LOCKS_ACCEPTABLE
0x40000 OPTIMISTIC_ACCEPTABLE
0x80000 OPTIMISITC_ACCEPTABLE

Al igual que con scrollopt, SQL Server puede asignar un valor diferente al solicitado.

Rowcount

Parámetro opcional que indica el número de filas del búfer de captura que se van a usar con AUTO_FETCH. El valor predeterminado es 20 filas. rowcount se comporta de forma diferente cuando se asigna como un valor de entrada frente a un valor devuelto.

Como valor de entrada Como valor devuelto
Cuando se especifica AUTO_FETCH con FAST_FORWARD recuento de filas de cursores representa el número de filas que se van a colocar en el búfer de captura. Representa el número de filas en el conjunto de resultados. Cuando se especifica el valor scrollopt AUTO_FETCH, rowcount devuelve el número de filas que se capturaron en el búfer de captura.

parameter_name

Designa uno o varios nombres de parámetro como se define en el argumento params . Debe haber un parámetro proporcionado para cada parámetro incluido en los parámetros. Este argumento no es necesario cuando la instrucción Transact-SQL o el lote en parámetros no tiene ningún parámetro definido.

Valores de código de retorno

Si los parámetros devuelven un valor NULL, la instrucción no está parametrizada.

Ejemplos

En este ejemplo se muestra el uso de sp_cursorprepexec. Ejecuta una consulta en la Person tabla de la AdventureWorks2022 base de datos que devuelve todos los registros donde el nombre es "Katherine".

USE AdventureWorks2022;
GO

DECLARE @prep_handle INT,
    @cursor INT,
    @scrollopt INT = 4104,
    @ccopt INT = 8193,
    @rowcnt INT;

EXEC sp_cursorprepexec
    @prep_handle OUTPUT,
    @cursor OUTPUT,
    N'@fName nvarchar(100)',
    N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
    @scrollopt,
    @ccopt,
    @rowcnt OUTPUT,
    'Katherine';

EXEC sp_cursorfetch @cursor;