sp_cursorprepare (Transact-SQL)
Aplica-se:SQL Server
Compila a instrução ou lote do cursor em um plano de execução, mas não cria o cursor. A instrução compilada pode ser usada posteriormente pelo sp_cursorexecute
. Este procedimento, juntamente com 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 tabulares).
Convenções de sintaxe de Transact-SQL
Sintaxe
sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
[ , scrollopt [ , ccopt ] ]
[ ; ]
Argumentos
Importante
Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.
prepared_handle
Um identificador preparado handle
gerado pelo SQL Server que retorna um valor int .
prepared_handle é então fornecido a um sp_cursorexecute
procedimento para abrir um cursor. Depois que um identificador é criado, ele existe até que você saia ou até que você o remova explicitamente por meio de um sp_cursorunprepare
procedimento.
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 NULL
valor se a instrução não estiver parametrizada.
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, **ncar ou nvarchar .
As regras para especificar o valor stmt são as mesmas sp_cursoropen
que , com a exceção de que o tipo de dados de cadeia de caracteres stmt deve ser ntext.
options
Retorna uma descrição das colunas do conjunto de resultados do cursor. O parâmetro options é int, com um padrão de NULL
. Quando definido como 0x0001
, significa RETURN_METADATA
.
scrollopt
Opção de rolagem. O parâmetro 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 |
OPTIMISTIC_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 valores:
Valor | Descrição |
---|---|
0 |
Êxito |
0x0001 |
Falha |
1FF6 |
Não foi possível retornar metadados. Observação: a razão para isso é que a instrução não produz um conjunto de resultados; por exemplo, é uma INSERT instrução ou DDL. |
Exemplos
O código a seguir é um exemplo de uso 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 scrolloptPARAMETERIZED_STMT
é ON
, o formato da string está no seguinte formato:
<parameter_name> <data_type> [ ,... n ]