Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Een sjabloonplangids is geschikt voor autonome query's die worden geparametriseerd naar een specifieke vorm.
In het volgende voorbeeld wordt een plangids gemaakt die overeenstemt met elke query die parameterisatie van een gespecificeerd formaat vereist, en wordt SQL Server geïnstrueerd om parameterisatie van de query af te dwingen. De volgende twee query's zijn syntactisch equivalent, maar verschillen alleen in hun constante letterlijke waarden.
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;
Hier volgt de planhandleiding voor de geparameteriseerde vorm van de query:
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)';
In het vorige voorbeeld is de waarde voor de parameter @stmt de geparameteriseerde vorm van de query. De enige betrouwbare manier om deze waarde te verkrijgen voor gebruik in sp_create_plan_guide is het gebruik van de sp_get_query_template systeemopgeslagen procedure. Het volgende script kan worden gebruikt om de geparameteriseerde query te verkrijgen en er vervolgens een planhandleiding voor te maken.
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)';
Belangrijk
De waarde van de constante letterlijke waarden in de @stmt parameter die wordt doorgegeven aan sp_get_query_template kan van invloed zijn op het gegevenstype dat is gekozen voor de parameter die de letterlijke waarde vervangt. Dit is van invloed op het afstemmen van planhandleidingen. Mogelijk moet u meer dan één planhandleiding maken voor het afhandelen van verschillende parameterwaardebereiken.
U kunt sjabloonplanhandleidingen ook gebruiken in combinatie met SQL-planhandleidingen. U kunt bijvoorbeeld een sjabloonplanhandleiding maken om ervoor te zorgen dat een klasse van query's wordt geparameteriseerd. Vervolgens kunt u een SQL-planhandleiding maken voor de geparameteriseerde vorm van die query.