Partilhar via


sp_get_query_template (Transact-SQL)

Aplica-se a:SQL Server

Retorna a forma parametrizada de uma consulta. Os resultados retornados imitam a forma parametrizada de uma consulta que resulta do uso de parametrização forçada. sp_get_query_template é usado principalmente quando você cria guias de plano TEMPLATE.

Transact-SQL convenções de sintaxe

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 de 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 ser precedido pelo especificador Unicode N.

@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âmetros e tipos de dados parametrizados em @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 cadeia de caracteres 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 saída @templatetext e @parameters.

Permissões

Requer associação à função de banco de dados pública.

Exemplos

O exemplo a seguir retorna a forma parametrizada de uma consulta que contém dois valores literais constantes.

USE AdventureWorks2022;
GO

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

EXECUTE 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;

Aqui estã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

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

Aqui estão os resultados parametrizados do parâmetro @my_parameters OUTPUT:

@0 int

A ordem e a nomenclatura dos parâmetros na saída do sp_get_query_template podem mudar 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 um espaçamento diferente seja aplicado nos resultados de ambos os parâmetros de saída.