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.