Partilhar via


sp_recompile (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Faz com que procedimentos armazenados, triggers e funções definidas pelo utilizador sejam recompilados na próxima execução. Faz isto ao eliminar o plano existente da cache do procedimento, forçando a criação de um novo plano na próxima vez que o procedimento ou disparador for executado. Numa coleção SQL Server Profiler, o evento SP:CacheInsert é registado em vez do evento SP:Recompile.

Transact-SQL convenções de sintaxe

Sintaxe

sp_recompile [ @objname = ] N'object'
[ ; ]

Arguments

[ @objname = ] N'objeto'

O nome qualificado ou não qualificado de um procedimento armazenado, trigger, tabela, vista ou função definida pelo utilizador na base de dados atual. @objname é nvarchar(776), sem padrão.

  • Se @objname for o nome de um procedimento armazenado, trigger ou função definida pelo utilizador, o procedimento armazenado, trigger ou função será recompilado na próxima execução.

  • Se @objname for o nome de uma tabela ou vista, todos os procedimentos armazenados, triggers ou funções definidas pelo utilizador que fazem referência à tabela ou vista serão recompilados na próxima execução.

Valores de código de retorno

0 (sucesso) ou um número diferente de zero (falha).

Observações

sp_recompile procura apenas um objeto na base de dados atual.

As consultas usadas por procedimentos armazenados, ou triggers, e funções definidas pelo utilizador são otimizadas apenas quando são compiladas. À medida que são feitos índices ou outras alterações que afetam estatísticas na base de dados, procedimentos armazenados compilados, triggers e funções definidas pelo utilizador podem perder eficiência. Ao recompilar procedimentos armazenados e triggers que atuam numa tabela, pode reotimizar as consultas.

A execução proativa deste procedimento armazenado é geralmente desnecessária. O SQL Server recompila automaticamente procedimentos armazenados, triggers e funções definidas pelo utilizador quando vantajoso. Existem várias razões pelas quais o motor de base de dados pode optar por recompilar objetos. Mais frequentemente, a recompilação automática segue alterações na estimativa de cardinalidade subjacente devido a atualizações estatísticas automáticas ou manuais.

Recompilar um procedimento armazenado a cada execução é uma das formas menos eficientes de combater problemas no plano de consulta causados pela parametrização. A funcionalidade Parameter Sensitive Plan Optimization , introduzida no SQL Server 2022 (16.x), tenta mitigar este problema automaticamente. Em versões anteriores, em vez de chamar sp_recompile com cada execução, considere:

Permissions

Requer permissão ALTER no objeto especificado.

Examples

O exemplo seguinte faz com que procedimentos armazenados, triggers e funções definidas pelo utilizador que atuam na Sales.Customer tabela sejam recompilados na próxima execução.

USE AdventureWorks2022;
GO

EXECUTE sp_recompile N'Sales.Customer';
GO