Compartir vía


sp_get_query_template (Transact-SQL)

Se aplica a: SQL Server

Devuelve el formato con parámetros de una consulta. Los resultados devueltos simulan el formato con parámetros de un consulta resultante cuando se utiliza la parametrización forzada. sp_get_query_template se usa principalmente al crear TEMPLATE guías de plan.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

[ @querytext = ] N'querytext'

Consulta para la que se va a generar la versión con parámetros. @querytext es nvarchar(max) y debe ir entre comillas simples y ir precedida por el N especificador Unicode.

@templatetext

Parámetro OUTPUT de tipo nvarchar(max), proporcionado como se indica, para recibir la forma parametrizada de @querytext como literal de cadena.

@parameters

Parámetro de salida de tipo nvarchar(max), proporcionado como se indica, para recibir un literal de cadena de los nombres de parámetros y los tipos de datos que se parametrizan en @templatetext.

Comentarios

sp_get_query_template devuelve un error cuando se produce lo siguiente:

  • No parametriza ningún valor literal constante en @querytext.
  • @querytext es NULL, no una cadena Unicode, sintácticamente no válida o no se puede compilar.

Si sp_get_query_template devuelve un error, no modifica los valores del @templatetext y @parameters los parámetros de salida.

Permisos

Requiere la pertenencia al rol de base de datos pública .

Ejemplos

En el ejemplo siguiente se devuelve el formato con parámetros de una consulta que contiene dos valores literales 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;

Estos son los resultados con parámetros del 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

El primer literal constante, 2, se convierte en un parámetro . El segundo literal, 400, no se convierte porque está dentro de una HAVING cláusula . Los resultados devueltos por sp_get_query_template imitan la forma parametrizada de una consulta cuando la PARAMETERIZATION opción de ALTER DATABASE se establece FORCEDen .

Estos son los resultados con parámetros del parámetro @my_parameters OUTPUT:

@0 int

El orden y la nomenclatura de los parámetros de la salida de sp_get_query_template pueden cambiar entre la ingeniería de corrección rápida, el Service Pack y las actualizaciones de versiones de SQL Server. Las actualizaciones también pueden hacer que se parametrice un conjunto distinto de literales constantes para la misma consulta y que se aplique un espaciado diferente a los resultados de ambos parámetros de salida.