Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Poradnik dotyczący planu szablonowego pasuje do autonomicznych zapytań, które są parametryzowane do określonego formatu.
Poniższy przykład tworzy przewodnik planowania, który pasuje do dowolnego zapytania sparametryzowanego w określonej formie, i nakazuje programowi SQL Server wymuszenie parametryzacji zapytania. Następujące dwa zapytania są składniowo równoważne, ale różnią się tylko stałymi wartościami literału.
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;
Oto przewodnik planu dotyczący sparametryzowanej formy zapytania:
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)';
W poprzednim przykładzie wartość parametru @stmt
jest sparametryzowaną formą zapytania. Jedynym niezawodnym sposobem uzyskania tej wartości do użycia w sp_create_plan_guide jest użycie procedury składowanej systemu sp_get_query_template. Poniższy skrypt może służyć zarówno do uzyskania sparametryzowanego zapytania, jak i utworzenia przewodnika dotyczącego planu.
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)';
Ważny
Wartość literałów stałych w parametrze @stmt
przekazanym do sp_get_query_template
może mieć wpływ na typ danych wybrany dla parametru zastępującego literał. Będzie to miało wpływ na dopasowanie instrukcji planu. Może być konieczne utworzenie więcej niż jednego przewodnika po planie w celu obsługi różnych zakresów wartości parametrów.
Przewodniki planu szablonu można również używać razem z przewodnikami planu SQL. Możesz na przykład utworzyć przewodnik po planie szablonu, aby upewnić się, że klasa zapytań jest sparametryzowana. Następnie możesz utworzyć przewodnik planu SQL dla sparametryzowanej formy tego zapytania.