Membuat Panduan Paket untuk Kueri Berparameter
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Panduan paket TEMPLAT cocok dengan kueri mandiri yang berparameter ke formulir tertentu.
Contoh berikut membuat panduan rencana yang cocok dengan kueri apa pun yang diparameterkan ke formulir tertentu, dan mengarahkan SQL Server untuk memaksa parameterisasi kueri. 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 yang @stmt
diteruskan sp_get_query_template
dapat memengaruhi jenis data yang dipilih untuk parameter yang menggantikan literal. Ini akan memengaruhi pencocokan panduan rencana. Anda mungkin harus membuat lebih dari satu panduan paket untuk menangani rentang nilai parameter yang berbeda.
Anda juga dapat menggunakan panduan paket TEMPLATE bersama dengan panduan paket SQL. Misalnya, Anda dapat membuat panduan paket TEMPLAT untuk memastikan bahwa kelas kueri diparameterkan. Anda kemudian dapat membuat panduan paket SQL pada bentuk parameter kueri tersebut.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk