Sdílet prostřednictvím


sp_get_query_template (Transact-SQL)

platí pro:SQL Server

Vrátí parametrizovanou formu dotazu. Výsledky vrátily napodobit parametrizovanou formu dotazu, která má za následek použití vynucené parametrizace. sp_get_query_template se používá především při vytváření průvodců plánu TEMPLATE.

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

Důležitý

Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.

[ @querytext = ] N'querytext'

Dotaz, pro který se má vygenerovat parametrizovaná verze. @querytext je nvarchar(max)a musí být uzavřena do jednoduchých uvozovek a předcházet specifikátoru N Unicode.

@templatetext

Výstupní parametr typu nvarchar(max), jak je uvedeno, aby získal parametrizovanou formu @querytext jako řetězcový literál.

@parameters

Výstupní parametr typu nvarchar(max), jak je uvedeno, pro příjem řetězcového literálu názvů parametrů a datových typů, které jsou parametrizovány v @templatetext.

Poznámky

sp_get_query_template vrátí chybu, pokud dojde k následujícímu:

  • Parametrizuje žádné hodnoty konstantního literálu v @querytext.
  • @querytext je NULL, ne řetězec Unicode, syntakticky neplatný nebo nelze kompilovat.

Pokud sp_get_query_template vrátí chybu, nezmění hodnoty @templatetext a @parameters výstupních parametrů.

Dovolení

Vyžaduje členství v roli databáze veřejné.

Příklady

Následující příklad vrátí parametrizovanou formu dotazu, která obsahuje dvě hodnoty konstantního literálu.

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;

Tady jsou parametrizované výsledky parametru @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

První konstantní literál, 2, je převeden na parametr. Druhý literál, 400, není převeden, protože je uvnitř klauzule HAVING. Výsledky vrácené sp_get_query_template napodobují parametrizovanou formu dotazu, když je PARAMETERIZATION možnost ALTER DATABASE nastavena na FORCED.

Tady jsou parametrizované výsledky parametru @my_parameters OUTPUT:

@0 int

Pořadí a pojmenování parametrů ve výstupu sp_get_query_template se může změnit mezi rychlým inženýrstvím, aktualizací Service Pack a upgrady verzí SQL Serveru. Upgrady můžou také způsobit, že pro stejný dotaz bude parametrizována jiná sada konstantních literálů a ve výsledcích obou výstupních parametrů se použijí různé mezery.