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
Azure SQL Database
azure SQL Managed Instance
Když nastavíte PARAMETERIZATION možnost databáze na SIMPLE, SQL Server optimalizátor dotazů se může rozhodnout parametrizovat dotazy. Tato parametrizace nahrazuje všechny literální hodnoty v dotazu parametry. Tento proces se označuje jako jednoduchá parametrizace. Pokud SIMPLE je parametrizace platná, nemůžete řídit, které dotazy jsou parametrizovány a které dotazy nejsou. Můžete však určit, že všechny dotazy v databázi budou parametrizovány nastavením PARAMETERIZATION možnosti databáze na FORCEDhodnotu . Tento proces se označuje jako vynucené parametrizace.
Chování parametrizace databáze můžete přepsat pomocí příruček plánu následujícími způsoby:
| Option | Description |
|---|---|
SIMPLE |
Můžete určit, že se má u určité třídy dotazů použít vynucená parametrizace. To provedete tak, že vytvoříte průvodce plánem typu TEMPLATE pro parametrizovanou formu dotazu a v uložené proceduře sp_create_plan_guide zadáte hint dotazu PARAMETERIZATION FORCED. Tento druh průvodce plánem můžete považovat za způsob, jak povolit vynucené parametrizace pouze u určité třídy dotazů místo všech dotazů. Další informace naleznete v tématu Jednoduchá parametrizace. |
FORCED |
Můžete určit, že pro určitou třídu dotazů se pokusí provést pouze jednoduchá parametrizace, nikoli vynucená parametrizace. To provedete vytvořením průvodce plánem typu TEMPLATE pro vynuceně parametrizovaný tvar dotazu a zadáním rady dotazu PARAMETERIZATION SIMPLE v sp_create_plan_guide. Další informace naleznete v tématu Vynucené parametrizace. |
Zvažte následující dotaz na databázi AdventureWorks2025:
SELECT pi.ProductID,
SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi
ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING SUM(pi.Quantity) > 50;
Jako správce databáze zjistíte, že nechcete povolit vynucené parametrizace u všech dotazů v databázi. Chcete se však vyhnout nákladům na kompilaci u všech dotazů, které jsou syntakticky ekvivalentní předchozímu dotazu, ale liší se pouze v jejich konstantních literálových hodnotách. Jinými slovy, chcete, aby byl dotaz parametrizován tak, aby byl znovu použit plán dotazu pro tento druh dotazu. V tomto případě proveďte následující kroky:
Načtěte parametrizovanou formu dotazu. Jediným bezpečným způsobem, jak tuto hodnotu získat pro použití v
sp_create_plan_guide, je použití systémové uložené procedury sp_get_query_template.Vytvořte průvodce plánem v parametrizované podobě dotazu a zadejte nápovědu
PARAMETERIZATION FORCEDk dotazu.Důležitý
Jako součást parametrizace dotazu sql Server přiřadí datový typ parametrům, které nahradí hodnoty literálu v závislosti na hodnotě a velikosti literálu. Stejný proces se vyskytuje u hodnoty konstantních literálů předaných výstupnímu parametru
@stmtsp_get_query_template. Vzhledem k tomu, že datový typ zadaný v argumentu@paramssp_create_plan_guidemusí odpovídat hledanému dotazu, protože je parametrizován SQL Server, budete možná muset vytvořit více než jednoho průvodce plánem, který bude zahrnovat úplný rozsah možných hodnot parametrů dotazu.
K získání parametrizovaného dotazu a následnému vytvoření průvodce plánem můžete použít následující skript:
DECLARE @stmt AS NVARCHAR (MAX);
DECLARE @params AS NVARCHAR (MAX);
EXECUTE sp_get_query_template
N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm
INNER JOIN Production.ProductInventory AS pi ON pm.ProductModelID = pi.ProductID
WHERE pi.ProductID = 101
GROUP BY pi.ProductID, pi.Quantity
HAVING SUM(pi.Quantity) > 50',
@stmt OUTPUT, @params OUTPUT;
EXECUTE sp_create_plan_guide N'TemplateGuide1',
@stmt, N'TEMPLATE', NULL,
@params, N'OPTION(PARAMETERIZATION FORCED)';
Pokud je v databázi už povolená vynucená parametrizace, můžete ji přepsat pro konkrétní dotazy. Pokud chcete parametrizovat ukázkový dotaz a syntakticky ekvivalentní dotazy podle jednoduchých pravidel parametrizace, zadejte PARAMETERIZATION SIMPLE místo PARAMETERIZATION FORCEDOPTION klauzule.
Poznámka
Průvodci šablonovým plánem přiřazují příkazy k dotazům odeslaným v dávkách, které se skládají pouze z jednoho příkazu. Příkazy uvnitř dávek obsahujících více příkazů nelze přiřadit k vodítkům plánů TEMPLATE.