매개 변수가 있는 쿼리에 대한 계획 지침 만들기
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
TEMPLATE 계획 지침은 지정된 형식으로 매개 변수화되는 독립 실행형 쿼리와 일치합니다.
다음 예제에서는 지정된 형식으로 매개 변수화하는 쿼리와 일치하는 계획 지침을 만들고 SQL Server에 쿼리의 매개 변수화를 강제로 적용하도록 지시합니다. 다음 두 쿼리는 구문적으로 동일하지만 상수 리터럴 값에서만 다릅니다.
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;
매개 변수가 있는 쿼리 형식에 대한 계획 지침은 다음과 같습니다.
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)';
앞의 예에서 @stmt
매개 변수의 값은 매개 변수가 있는 쿼리 형식입니다. sp_create_plan_guide 사용을 위해 이 값을 가져오는 유일한 신뢰할 수 있는 방법은 sp_get_query_template 시스템 저장 프로시저를 사용하는 것입니다. 다음 스크립트를 사용하여 매개 변수가 있는 쿼리를 가져온 다음 계획 지침을 만들 수 있습니다.
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)';
Important
@stmt
에 전달된 sp_get_query_template
매개 변수에 있는 상수 리터럴 값은 리터럴을 대체하는 매개 변수에 대해 선택한 데이터 형식에 영향을 미칠 수 있습니다. 이는 계획 지침 일치에 영향을 미칩니다. 서로 다른 매개 변수 값 범위를 처리하려면 둘 이상의 계획 지침을 만들어야 할 수 있습니다.
SQL 계획 지침과 함께 TEMPLATE 계획 지침을 사용할 수도 있습니다. 예를 들어 템플릿 계획 지침을 만들어 쿼리 클래스가 매개 변수화되었는지 확인할 수 있습니다. 그런 다음 매개 변수가 있는 해당 쿼리 형식에 대한 SQL 계획 지침을 만들 수 있습니다.