Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Felügyelt Példány
Az adatbázis beállításának PARAMETERIZATIONSIMPLEbeállításakor a SQL Server lekérdezésoptimalizáló dönthet úgy, hogy paraméterezi a lekérdezéseket. Ez a paraméterezés a lekérdezés összes literálértékét paraméterekkel helyettesíti. Ezt a folyamatot egyszerű paraméterezésnek nevezzük. Ha SIMPLE a paraméterezés érvényben van, nem szabályozhatja, hogy mely lekérdezések vannak paraméterezve, és mely lekérdezések nem. Megadhatja azonban, hogy az adatbázis összes lekérdezése paraméterezhető legyen az PARAMETERIZATION adatbázis beállításának beállításával FORCED. Ezt a folyamatot kényszerített paraméterezésnek nevezzük.
Az adatbázisok paraméterezési viselkedését a következő módokon bírálhatja felül terv-útmutatók használatával:
| Option | Description |
|---|---|
SIMPLE |
Megadhatja, hogy a rendszer kényszerített paraméterezést kísérel meg a lekérdezések egy bizonyos osztályán. Ezt úgy teheti meg, hogy létrehoz egy TEMPLATE plan guide-ot a lekérdezés paraméterezett formáján, és megadja a PARAMETERIZATION FORCED lekérdezési hintet a sp_create_plan_guide tárolt eljárásban. Az ilyen típusú tervutasítást úgy tekintheti, hogy a kényszerített paraméterezést csak a lekérdezések egy bizonyos osztályán engedélyezheti, nem pedig az összes lekérdezést. További információ: Egyszerű paraméterezés. |
FORCED |
Megadhatja, hogy a lekérdezések egy bizonyos osztálya esetében csak egyszerű paraméterezést kísérel meg, nem kényszerített paraméterezést. Ehhez hozzon létre egy TEMPLATE tervútmutatót a lekérdezés erőltetetten paraméterezett alakján, és adja meg a PARAMETERIZATION SIMPLE lekérdezési utasítást a sp_create_plan_guide elemben. További információ: Kényszerített paraméterezés. |
Fontolja meg a következő lekérdezést a AdventureWorks2025-adatbázisban:
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;
Adatbázis-rendszergazdaként ön dönti el, hogy nem szeretné engedélyezni a kényszerített paraméterezést az adatbázis összes lekérdezésén. Azonban el szeretné kerülni az összes olyan lekérdezés fordítási költségeit, amelyek szintaktikailag egyenértékűek az előző lekérdezésével, de csak az állandó literális értékekben különböznek. Más szóval azt szeretné, hogy a lekérdezés paraméterezve legyen, hogy az ilyen típusú lekérdezések lekérdezési tervét újra felhasználja a rendszer. Ebben az esetben hajtsa végre a következő lépéseket:
Kérje le a lekérdezés paraméteres formáját. Az értéknek az
sp_create_plan_guideelemben való használathoz történő lekérdezésének egyetlen biztonságos módja a sp_get_query_template rendszerben tárolt eljárás használata.Hozza létre a terv útmutatóját a lekérdezés paraméteres formájában, és adja meg a
PARAMETERIZATION FORCEDlekérdezési tippet.Fontos
A lekérdezés paraméterezésének részeként az SQL Server egy adattípust rendel a literálértékeket lecserélő paraméterekhez a literál értékétől és méretétől függően. Ugyanez a folyamat játszódik le a
sp_get_query_template@stmtkimeneti paraméterének átadott konstansliterálok értékével is. Mivel az@paramsargumentumbansp_create_plan_guidemegadott adattípusnak meg kell egyeznie a lekérdezés SQL Server által paraméterezett adattípusával, előfordulhat, hogy több terv útmutatót kell létrehoznia a lekérdezés lehetséges paraméterértékeinek teljes tartományának lefedéséhez.
A paraméteres lekérdezés beszerzéséhez és a terv útmutatójának létrehozásához a következő szkript használható:
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)';
Ha a kényszerített paraméterezés már engedélyezve van az adatbázisban, felülbírálhatja adott lekérdezések esetén. Ha a minta lekérdezést és a szintaktikailag egyenértékű lekérdezéseket egyszerű paraméterezési szabályok szerint szeretné paraméterezni, adja meg PARAMETERIZATION SIMPLE a PARAMETERIZATION FORCED záradék helyettOPTION.
Jegyzet
A TEMPLATE tervútmutatók az egyetlen utasításból álló kötegekben elküldött lekérdezéseket az utasításokkal egyeztetik. A több utasítást tartalmazó kötegekben lévő utasítások nem egyeztethetők TEMPLATE típusú tervútmutatókkal.