sp_cursorprepexec (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System)

Compila um plano para a instrução de cursor ou lote enviado e, em seguida, cria e popula o cursor. sp_cursorprepexec combina as funções de sp_cursorprepare e sp_cursorexecute. Esse procedimento é invocado especificando ID = 5 em um pacote TDS (fluxo de dados tabular).

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
    [ , scrollopt [ , ccopt [ , rowcount ] ] ]
    [ , '@parameter_name [ , ...n ]' ]

Argumentos

Alça preparada

Um identificador de identificador preparado gerado pelo SQL Server. O identificador preparado é necessário e retorna int.

cursor

O identificador de cursor gerado pelo SQL Server. cursor é um parâmetro necessário que deve ser fornecido em todos os procedimentos subsequentes que atuam sobre esse cursor, por exemplo, sp_cursorfetch.

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 .

Observação

Use uma cadeia de caracteres ntext como o valor de entrada quando a instrução for parametrizada e o valor do PARAMETERIZED_STMT scrollopt for ON.

instrução

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

Observação

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

options

Um parâmetro opcional que retorna uma descrição das colunas do conjunto de resultados de cursor. As opções exigem 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

Devido à possibilidade de que a opção solicitada não seja apropriada para o cursor definido pela instrução, esse parâmetro serve como entrada e saída. Nesses casos, o SQL Server atribui um tipo apropriado e modifica esse valor.

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 scrollopt, o SQL Server pode atribuir um valor diferente do solicitado.

contagem de linhas

Um parâmetro opcional que significa o número de linhas de buffer de busca a serem usadas com AUTO_FETCH. O padrão é 20 linhas. rowcount se comporta de forma diferente quando atribuído como um valor de entrada versus um valor retornado.

Como valor de entrada Como valor de retorno
Quando AUTO_FETCH é especificado com FAST_FORWARD cursores , a contagem de linhas representa o número de linhas a serem colocadas no buffer de busca. Representa o número de linhas no conjunto de resultados. Quando o valor de AUTO_FETCH scrollopt é especificado, rowcount retorna o número de linhas que foram buscadas no buffer de busca.

parameter_name

Designa um ou mais nomes de parâmetros, conforme definido no argumento params . Deve haver um parâmetro fornecido para cada parâmetro incluído nos parâmetros. Esse argumento não é necessário quando a instrução Transact-SQL ou o lote em parâmetros não tem parâmetros definidos.

Valores do código de retorno

Se params retornar um NULL valor, a instrução não será parametrizada.

Exemplos

Este exemplo demonstra o uso de sp_cursorprepexec. Ele executa uma consulta na Person tabela no banco de dados retornando todos os registros em que o AdventureWorks2022 nome é "Katherine".

USE AdventureWorks2022;
GO

DECLARE @prep_handle INT,
    @cursor INT,
    @scrollopt INT = 4104,
    @ccopt INT = 8193,
    @rowcnt INT;

EXEC sp_cursorprepexec
    @prep_handle OUTPUT,
    @cursor OUTPUT,
    N'@fName nvarchar(100)',
    N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
    @scrollopt,
    @ccopt,
    @rowcnt OUTPUT,
    'Katherine';

EXEC sp_cursorfetch @cursor;