Megosztás:


Tervútmutató létrehozása paraméteres lekérdezésekhez

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL példány

A sablonterv útmutatója olyan önálló lekérdezésekkel egyezik meg, amelyek egy adott formátumra paraméterezhetők.

Az alábbi példa létrehoz egy tervútmutatót, amely megfelel a megadott űrlapra paraméterezendő lekérdezéseknek, és az SQL Servert a lekérdezés paraméterezésének kényszerítésére utasítja. A következő két lekérdezés szintaktikailag egyenértékű, de csak az állandó literális értékekben különbözik.

SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
    ON h.SalesOrderID = d.SalesOrderID  
WHERE h.SalesOrderID = 45639;  
  
SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
    ON h.SalesOrderID = d.SalesOrderID  
WHERE h.SalesOrderID = 45640;  

A lekérdezés paraméteres formájának tervútmutatója:

EXEC sp_create_plan_guide   
    @name = N'TemplateGuide1',  
    @stmt = N'SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
              INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
                  ON h.SalesOrderID = d.SalesOrderID  
              WHERE h.SalesOrderID = @0',  
    @type = N'TEMPLATE',  
    @module_or_batch = NULL,  
    @params = N'@0 int',  
    @hints = N'OPTION(PARAMETERIZATION FORCED)';  

Az előző példában a @stmt paraméter értéke a lekérdezés paraméteres formája. Az érték sp_create_plan_guide való felhasználásának egyetlen megbízható módja a sp_get_query_template rendszer által tárolt eljárás használata. A következő szkript használható a paraméteres lekérdezés lekérésére, majd egy terv útmutatójának létrehozására.

DECLARE @stmt nvarchar(max);  
DECLARE @params nvarchar(max);  
EXEC sp_get_query_template   
    N'SELECT * FROM AdventureWorks2022.Sales.SalesOrderHeader AS h  
      INNER JOIN AdventureWorks2022.Sales.SalesOrderDetail AS d   
          ON h.SalesOrderID = d.SalesOrderID  
      WHERE h.SalesOrderID = 45639;',  
    @stmt OUTPUT,   
    @params OUTPUT  
EXEC sp_create_plan_guide N'TemplateGuide1',   
    @stmt,   
    N'TEMPLATE',   
    NULL,   
    @params,   
    N'OPTION(PARAMETERIZATION FORCED)';  

Fontos

A @stmt paraméter sp_get_query_template-hez való átadásakor a konstansok értéke befolyásolhatja a konstanst helyettesítő paraméterhez kiválasztott adattípust. Ez hatással lesz a terv útmutatóinak egyeztetésére. Előfordulhat, hogy több terv útmutatót kell létrehoznia a különböző paraméterértéktartományok kezeléséhez.

A SABLONterv-útmutatókat az SQL-terv útmutatóival együtt is használhatja. Létrehozhat például egy SABLONterv-útmutatót, amellyel meggyőződhet arról, hogy a lekérdezések egy osztálya paraméteres. Ezután létrehozhat egy SQL-terv útmutatót a lekérdezés paraméteres formájában.