Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
.
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.
Související obsah
- uložené procedury systému (Transact-SQL)
- uložené procedury databázového stroje (Transact-SQL)
- určení chování parametrizace dotazu pomocí průvodců plánem