Partilhar via


sp_cursorprepare (Transact-SQL)

Aplica-se a:SQL Server

Compila a instrução do cursor ou o lote 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 sp_cursorexecute, tem a mesma função que sp_cursoropen, mas é dividido em duas fases. sp_cursorprepare é invocado especificando ID = 3 em um pacote de fluxo de dados tabular (TDS).

Transact-SQL convenções de sintaxe

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 de sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.

prepared_handle

Um identificador de handle preparado gerado pelo SQL Server que retorna um valor int.

prepared_handle é então fornecido a um procedimento sp_cursorexecute 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 procedimento sp_cursorunprepare.

params

Identifica instruções parametrizadas. Os parâmetros definição de variáveis são substituídos por marcadores de parâmetros na declaração. params é um parâmetro obrigatório que requer um ntext, ncharou nvarchar valor de entrada. Insira um valor NULL se a instrução não estiver parametrizada.

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

stmt

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

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

opções

Retorna uma descrição das colunas do conjunto de resultados do cursor. As opções parâmetro é 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 de rolagem, 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 Sucesso
0x0001 Fracasso
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

O código a seguir é um exemplo de uso de sp_cursorprepare e sp_cursorexecute:

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

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

DECLARE @p1 AS INT;
SET @P1 = @handle;

DECLARE @p2 AS INT;
DECLARE @p3 AS INT;
DECLARE @p4 AS INT;
SET @P6 = 4;

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

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

Quando stmt é parametrizado e o valor scrolloptPARAMETERIZED_STMT é ON, o formato da string está na seguinte forma:

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