Comparteix a través de


sp_recompile (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Hace que los procedimientos almacenados, los desencadenadores y las funciones definidas por el usuario se vuelvan a compilar la próxima vez que se ejecuten. Para ello, quita el plan existente de la memoria caché de procedimientos, lo que obliga a crear un nuevo plan la próxima vez que se ejecute el procedimiento o desencadenador. En una colección de SQL Server Profiler, el evento SP:CacheInsert se registra en lugar del evento SP:Recompile.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

[ @objname = ] N'object'

El nombre calificado o no calificado de un desencadenador, tabla, vista, procedimiento almacenado o función definida por el usuario de la base de datos actual. @objname es nvarchar(776), sin ningún valor predeterminado.

  • Si @objname es el nombre de un procedimiento almacenado, un desencadenador o una función definida por el usuario, el procedimiento almacenado, el desencadenador o la función se volverán a compilar la próxima vez que se ejecute.

  • Si @objname es el nombre de una tabla o vista, todos los procedimientos almacenados, desencadenadores o funciones definidas por el usuario que hacen referencia a la tabla o vista se volverán a compilar la próxima vez que se ejecuten.

Valores de código de retorno

0 (correcto) o un número distinto de cero (error).

Comentarios

sp_recompile busca un objeto solo en la base de datos actual.

Las consultas que usan los procedimientos almacenados, los desencadenadores y las funciones definidas por el usuario solo se optimizan cuando se compilan. A medida que los índices u otros cambios que afectan a las estadísticas se realizan en la base de datos, los procedimientos almacenados compilados, los desencadenadores y las funciones definidas por el usuario podrían perder eficacia. Al volver a compilar los procedimientos almacenados y desencadenadores que actúan sobre una tabla, puede volver a optimizar las consultas.

La ejecución proactiva de este procedimiento almacenado suele ser innecesaria. SQL Server vuelve a compilar automáticamente procedimientos almacenados, desencadenadores y funciones definidas por el usuario cuando resulta ventajoso. Hay varias razones por las que el motor de base de datos puede optar por volver a compilar objetos. Normalmente, la recompilación automática sigue los cambios en la estimación de cardinalidad subyacente debido a actualizaciones automáticas o manuales de estadísticas.

Volver a compilar un procedimiento almacenado con cada ejecución es una de las formas menos eficaces de combatir los problemas del plan de consulta causados por la parametrización. La característica Optimización del plan confidencial de parámetros introducida en SQL Server 2022 (16.x) intenta mitigar este problema automáticamente. En versiones anteriores, en lugar de llamar a sp_recompile con cada ejecución, tenga en cuenta lo siguiente:

  • Anexe la opción WITH RECOMPILE a la consulta, lo que requiere un cambio de código.
  • Aplique la WITH RECOMPILE opción con una guía de plan.
  • Aplique la WITH RECOMPILE opción con una sugerencia de Almacén de consultas sin realizar cambios en el código.
  • Para obtener más información, consulte Resolución de consultas con problemas de plan confidencial de parámetros.

Permisos

Requiere el permiso ALTER en el objeto especificado.

Ejemplos

En el ejemplo siguiente se vuelven a compilar los procedimientos almacenados, los desencadenadores y las funciones definidas por el usuario que actúan en la Sales.Customer tabla la próxima vez que se ejecuten.

USE AdventureWorks2022;
GO
EXEC sp_recompile N'Sales.Customer';
GO