Partilhar 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

@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.