Compartilhar via


sp_get_query_template (Transact-SQL)

Aplica-se:SQL Server

Retorna o formulário com parâmetros de uma consulta. Os resultados retornados imitam o formulário parametrizado de uma consulta que é o resultado do uso de parametrização forçada. sp_get_query_template é usado principalmente quando você cria TEMPLATE guias de plano.

Convenções de sintaxe de Transact-SQL

Sintaxe

sp_get_query_template
   [ @querytext = ] N'querytext'
   , @templatetext OUTPUT
   , @parameters OUTPUT
[ ; ]

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.

@querytext [ = ] N'querytext'

A consulta para a qual a versão parametrizada deve ser gerada. @querytext é nvarchar(max) e deve ser colocado entre aspas simples e precedido N pelo especificador Unicode.

@templatetext

Um parâmetro OUTPUT do tipo nvarchar(max), fornecido conforme indicado, para receber a forma parametrizada de @querytext como um literal de cadeia de caracteres.

@parameters

Um parâmetro de saída do tipo nvarchar(max), fornecido conforme indicado, para receber um literal de cadeia de caracteres dos nomes de parâmetro e tipos de dados parametrizados no @templatetext.

Comentários

sp_get_query_template retorna um erro quando ocorre o seguinte:

  • Ele não parametriza nenhum valor literal constante em @querytext.
  • @querytext é NULL, não é uma string Unicode, sintaticamente não é válida ou não pode ser compilada.

Se sp_get_query_template retornar um erro, ele não modificará os valores dos parâmetros de @templatetext e @parameters saída.

Permissões

Requer associação na função de banco de dados público .

Exemplos

O exemplo a seguir retorna o formulário com parâmetros de uma consulta que contém dois valores literais constantes.

USE AdventureWorks2022;
GO

DECLARE @my_templatetext NVARCHAR(MAX);
DECLARE @my_parameters NVARCHAR(MAX);

EXEC sp_get_query_template N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
        FROM Production.ProductModel pm
        INNER JOIN Production.ProductInventory pi
        ON pm.ProductModelID = pi.ProductID
        WHERE pi.ProductID = 2
        GROUP BY pi.ProductID, pi.Quantity
        HAVING SUM(pi.Quantity) > 400',
    @my_templatetext OUTPUT,
    @my_parameters OUTPUT;

SELECT @my_templatetext;
SELECT @my_parameters;

Estes são os resultados parametrizados do parâmetro @my_templatetext OUTPUT:

select pi . ProductID , SUM ( pi . Quantity ) as Total
from Production . ProductModel pm
inner join Production . ProductInventory pi
on pm . ProductModelID = pi . ProductID
where pi . ProductID = @0
group by pi . ProductID , pi . Quantity
having SUM ( pi . Quantity ) > 400

O primeiro literal constante, 2, é convertido em um parâmetro. O segundo literal, 400, não é convertido porque está dentro de uma HAVING cláusula. Os resultados retornados por sp_get_query_template imitam a forma parametrizada de uma consulta quando a PARAMETERIZATION opção de ALTER DATABASE é definida como FORCED.

Estes são os resultados parametrizados do parâmetro @my_parameters OUTPUT:

@0 int

A ordem e a nomenclatura dos parâmetros na saída de sp_get_query_template podem ser alteradas entre a engenharia de correção rápida, o service pack e as atualizações de versão do SQL Server. As atualizações também podem fazer com que um conjunto diferente de literais constantes seja parametrizado para a mesma consulta e que um espaçamento diferente seja aplicado nos resultados de ambos os parâmetros de saída.