Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
En mallplansguide matchar fristående frågor som parameteriseras till ett angivet formulär.
I följande exempel skapas en planguide som matchar alla frågor som parameteriseras till ett angivet formulär och som dirigerar SQL Server till att framtvinga parameterisering av frågan. Följande två frågor är syntaktiskt likvärdiga, men skiljer sig bara åt i sina konstanta literalvärden.
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;
Här är planguiden för frågans parametriserade form:
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)';
I föregående exempel är värdet för parametern @stmt
den parametriserade formen av frågan. Det enda tillförlitliga sättet att få det här värdet för användning i sp_create_plan_guide är att använda den sp_get_query_template system lagrade proceduren. Följande skript kan användas både för att hämta den parametriserade frågan och sedan skapa en planguide för den.
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)';
Viktig
Värdet för de konstanta literalerna i parametern @stmt
som skickas till sp_get_query_template
kan påverka den datatyp som väljs för parametern som ersätter literalen. Detta påverkar matchning av planguiden. Du kan behöva skapa fler än en planguide för att hantera olika parametervärdeintervall.
Du kan också använda mallplaner i kombination med SQL-planguider. Du kan till exempel skapa en mallplansguide för att se till att en klass med frågor parametriseras. Du kan sedan skapa en SQL-planguide för den parameteriserade formen av frågan.