Compartilhar via


sp_cursorprepare (Transact-SQL)

Aplica-se a: SQL Server

Compila a instrução de cursor ou processa em lotes em um plano de execução, mas não cria o cursor. A instrução compilada pode ser usada posteriormente por sp_cursorexecute. Este procedimento, juntamente com o sp_cursorexecute, tem a mesma função que sp_cursoropen, mas é dividido em duas fases. sp_cursorprepare é invocado especificando ID = 3 em um pacote TDS (fluxo de dados tabular).

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

prepared_handle
Um identificador de identificador preparado gerado pelo SQL Server que retorna um valor inteiro.

Observação

prepared_handle é fornecido posteriormente a um procedimento sp_cursorexecute para abrir um cursor. Quando um identificador é criado, ele existe até que você faça logoff ou remova-o explicitamente por meio de um procedimento sp_cursorunprepare.

params
Identifica instruções parametrizadas. A definição de parâmetros de variáveis é substituída por marcadores de parâmetro na instrução. params é um parâmetro necessário que chama um valor de entrada ntext, nchar ou nvarchar . Insira um valor NULL se a instrução não for parametrizada.

Observação

Use uma cadeia de caracteres ntext como o valor de entrada quando stmt estiver parametrizado e o valor de PARAMETERIZED_STMT scrollopt estiver ON.

stmt
Define o conjunto de resultados do cursor. O parâmetro stmt é necessário e chama um valor de entrada ntext, nchar ou nvarchar .

Observação

As regras para especificar o valor stmt são as mesmas do sp_cursoropen, com a exceção de que o tipo de dados de cadeia de caracteres stmt deve ser ntext.

options
Um parâmetro opcional que retorna uma descrição das colunas do conjunto de resultados de cursor. options requer o seguinte valor de entrada int .

Valor Descrição
0x0001 RETURN_METADATA

scrollopt
Opção de rolagem. scrollopt é um parâmetro opcional que requer um dos seguintes valores de entrada int .

Valor Descrição
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

Como o valor solicitado pode não ser apropriado para o cursor definido por stmt, esse parâmetro serve como entrada e saída. Nesses casos, o SQL Server atribui um valor apropriado.

CCOPT
Opção de controle de simultaneidade. ccopt é um parâmetro opcional que requer um dos seguintes valores de entrada int .

Valor Descrição
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (anteriormente conhecido como LOCKCC)
0x0004 OPTIMISTIC (anteriormente conhecido como OPTCC)
0x0008 OPTIMISTIC (anteriormente conhecido 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

Assim como acontece com scrollpt, o SQL Server pode atribuir um valor diferente do solicitado.

Comentários

O parâmetro de status RPC é um dos seguintes:

Valor Descrição
0 Êxito
0x0001 Falha
1FF6 Não foi possível retornar metadados.

Nota: A razão para isso é que a instrução não produz um conjunto de resultados; por exemplo, é uma instrução INSERT ou DDL.

Exemplos

Veja a seguir um exemplo de uso de sp_cursorprepare e 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

Quando stmt é parametrizado e o valor do PARAMETERIZED_STMT scrollopt é ON, o formato da string é o seguinte:

<{ nome> da variável local**<tipo> de dados } [ ,...n ]

Confira também

sp_cursorexecute (Transact-SQL)
sp_cursoropen (Transact-SQL)
sp_cursorunprepare (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)