Share via


sp_cursorprepare (Transact-SQL)

Se aplica a:SQL Server

Compila la instrucción de cursor o lote en un plan de ejecución, pero no crea el cursor. sp_cursorexecute puede utilizar después la instrucción compilada. 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 de identificador preparado generado por SQL Server que devuelve un valor entero.

Nota

prepared_handle se proporciona posteriormente a un procedimiento de sp_cursorexecute para abrir un cursor. Una vez creado un identificador, existe hasta que cierre sesión o hasta que lo quite explícitamente a través de un procedimiento sp_cursorunprepare.

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 . params es un parámetro necesario que llama a para un valor de entrada ntext, nchar o nvarchar . Escriba un valor NULL si la instrucción no tiene parámetros.

Nota

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

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

Nota

Las reglas para especificar el valor stmt son las mismas que las de sp_cursoropen, con la excepción de que el tipo de datos stmt string debe 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 .

Valor 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 .

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 el valor solicitado podría no ser 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 (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 scrollpt, SQL Server puede asignar un valor diferente del solicitado.

Comentarios

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

Valor Descripción
0 Correcto
0x0001 Error
1FF6 No pudo devolver los metadatos.

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

Ejemplos

A continuación se muestra un ejemplo de uso de sp_cursorprepare 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 se parametriza y el valor de scrollopt PARAMETERIZED_STMT es ON, el formato de la cadena es el siguiente:

{ <nombre> de variable local**<tipo> de datos } [ ,... n ]

Consulte también

sp_cursorexecute (Transact-SQL)
sp_cursoropen (Transact-SQL)
sp_cursorunprepare (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)