Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Panduan rencana TEMPLAT cocok dengan kueri mandiri yang berparameter ke bentuk tertentu.
Contoh berikut membuat pedoman rencana yang cocok dengan kueri apa pun yang memiliki bentuk tertentu, dan mengarahkan SQL Server untuk memaksa parameterisasi pada kueri tersebut. Dua kueri berikut secara sinaptis setara, tetapi hanya berbeda dalam nilai harfiah konstan mereka.
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;
Berikut adalah panduan rencana tentang bentuk kueri yang diparameterkan:
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)';
Dalam contoh sebelumnya, nilai untuk @stmt parameter adalah bentuk kueri berparameter. Satu-satunya cara yang dapat diandalkan untuk mendapatkan nilai ini untuk digunakan dalam sp_create_plan_guide adalah dengan menggunakan prosedur tersimpan sistem sp_get_query_template . Skrip berikut dapat digunakan keduanya untuk mendapatkan kueri berparameter lalu membuat panduan rencana di atasnya.
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)';
Penting
Nilai literal konstanta dalam parameter @stmt yang diteruskan ke sp_get_query_template dapat memengaruhi tipe data yang dipilih untuk parameter yang menggantikan literal tersebut. Ini akan memengaruhi pencocokan panduan rencana. Anda mungkin harus membuat lebih dari satu panduan rencana untuk menangani rentang nilai parameter yang berbeda.
Anda juga dapat menggunakan panduan paket TEMPLATE bersama dengan panduan paket SQL. Misalnya, Anda dapat membuat panduan rencana TEMPLAT untuk memastikan bahwa kelas kueri diparameterkan. Anda kemudian dapat membuat panduan rencana SQL pada bentuk terparameterisasi dari kueri tersebut.