Compartir a través de


sp_cursorprepare (Transact-SQL)

Se aplica a: SQL Server

Compila la instrucción de cursor o el lote en un plan de ejecución, pero no crea el cursor. La instrucción compilada se puede usar más adelante en sp_cursorexecute. Este procedimiento, junto con sp_cursorexecute, tiene la misma función que sp_cursoropen, pero se divide en dos fases. sp_cursorprepare se invoca especificando ID = 3 en un paquete de flujo de datos tabular (TDS).

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
    [ , scrollopt [ , ccopt ] ]
[ ; ]

Argumentos

prepared_handle

Identificador preparado handle generado por SQL Server que devuelve un valor int .

prepared_handle se proporciona a continuación a un sp_cursorexecute procedimiento para abrir un cursor. Una vez creado un identificador, existe hasta que se cierra la sesión o hasta que se quita explícitamente a través de un sp_cursorunprepare procedimiento.

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 . Escriba un NULL valor si la instrucción no está parametrizada.

Use una cadena ntext como valor de entrada cuando stmt está parametrizado y el valor de scrollopt PARAMETERIZED_STMT es ON.

stmt

Define el conjunto de resultados del cursor. El parámetro stmt es necesario y llama a un valor de entrada ntext, **nchar o nvarchar .

Las reglas para especificar el valor stmt son las mismas sp_cursoropenque , con la excepción de que el tipo de datos de cadena stmt debe ser ntext.

options

Devuelve una descripción de las columnas del conjunto de resultados del cursor. El parámetro options es int, con un valor predeterminado de NULL. Cuando se establece en 0x0001, significa RETURN_METADATA.

scrollopt

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

Valor 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

Dado que es posible que el valor solicitado no sea adecuado para el cursor definido por stmt, este parámetro actúa como entrada y salida. En casos como este, SQL Server asigna un valor adecuado.

ccopt

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

Valor Descripción
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (anteriormente conocido como LOCKCC)
0x0004 OPTIMISTIC (anteriormente conocido como OPTCC)
0x0008 OPTIMISTIC (anteriormente conocido 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 OPTIMISTIC_ACCEPTABLE

Al igual que con scrollpt, SQL Server puede asignar un valor diferente del solicitado.

Comentarios

El parámetro de estado RPC es uno de los siguientes valores:

Valor Descripción
0 Correcto
0x0001 Error
1FF6 No se pudieron devolver metadatos.

Nota: El motivo de esto es que la instrucción no genera un conjunto de resultados; por ejemplo, es una INSERT instrucción O DDL.

Ejemplos

El código siguiente es un ejemplo de uso sp_cursorprepare de y sp_cursorexecute:

DECLARE @handle INT, @p5 INT, @p6 INT;

EXEC sp_cursorprepare @handle OUTPUT,
    N'@dbid int',
    N'select * from sys.databases where database_id < @dbid',
    1,
    @p5 OUTPUT,
    @p6 OUTPUT;

DECLARE @p1 INT
SET @P1 = @handle;

DECLARE @p2 INT;
DECLARE @p3 INT;
DECLARE @p4 INT;

SET @P6 = 4;

EXEC sp_cursorexecute @p1,
    @p2 OUTPUT,
    @p3 OUTPUT,
    @p4 OUTPUT,
    @p5 OUTPUT,
    @p6;

EXEC sp_cursorfetch @P2;
EXEC sp_cursorunprepare @handle;
EXEC sp_cursorclose @p2;

Cuando stmt está parametrizado y el valor scrollopt PARAMETERIZED_STMT es ON, el formato de la cadena tiene el formato siguiente:

<parameter_name> <data_type> [ ,... n ]