Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Um guia de plano TEMPLATE corresponde a consultas independentes que se parametrizam para um formulário especificado.
O exemplo a seguir cria um guia de plano que corresponde a qualquer consulta que se parametriza num formulário especificado e direciona o SQL Server para forçar a parametrização da consulta. As duas consultas a seguir são sintaticamente equivalentes, mas diferem apenas em seus valores literais constantes.
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;
Aqui está o guia do plano na forma parametrizada da consulta:
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)';
No exemplo anterior, o valor para o parâmetro @stmt é a forma parametrizada da consulta. A única maneira confiável de obter esse valor para uso em sp_create_plan_guide é usar o procedimento armazenado do sistema sp_get_query_template. O script a seguir pode ser usado para obter a consulta parametrizada e, em seguida, criar um guia de plano sobre ela.
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)';
Importante
O valor dos literais constantes no parâmetro @stmt passado para sp_get_query_template pode afetar o tipo de dados escolhido para o parâmetro que substitui o literal. Isso afetará a correspondência do guia de planos. Talvez seja necessário criar mais de um guia de plano para lidar com diferentes intervalos de valores de parâmetros.
Você também pode usar guias de plano TEMPLATE juntamente com guias de plano SQL. Por exemplo, você pode criar um guia de plano TEMPLATE para garantir que uma classe de consultas seja parametrizada. Em seguida, você pode criar um guia de plano SQL na forma parametrizada dessa consulta.