Volver a compilar procedimientos almacenados
Cuando se cambia una base de datos mediante la adición de índices o la modificación de datos de columnas indizadas, los planes de consultas originales utilizados para el acceso a las tablas deberán optimizarse de nuevo; para ello, será preciso volver a compilarlos. Esta optimización se produce automáticamente la primera vez que se ejecuta un procedimiento almacenado tras reiniciar Microsoft SQL Server 2005. También se produce si cambia una tabla subyacente utilizada por el procedimiento almacenado. Pero si se agrega un nuevo índice del que se puede beneficiar el procedimiento, la optimización no se produce automáticamente hasta que se vuelva a ejecutar el procedimiento tras reiniciar Microsoft SQL Server. En esta situación, puede ser útil forzar que se vuelva a compilar el procedimiento almacenado la próxima vez que se ejecute.
Otro motivo para forzar que se vuelva a compilar un procedimiento almacenado es contrarrestar, cuando sea necesario, el comportamiento de "examen de parámetros" de la compilación de procedimientos almacenados. Cuando SQL Server ejecuta procedimientos almacenados, los valores de parámetros utilizados por el procedimiento cuando se compila se incluyen como parte de la generación del plan de consultas. Si esos valores representan los valores típicos con los que el procedimiento se invoca posteriormente, el procedimiento almacenado se beneficia del plan de consultas cada vez que se compila y se ejecuta. En caso contrario, el rendimiento puede verse afectado.
[!NOTA] SQL Server 2005 incorpora la recompilación de nivel de instrucciones de procedimientos almacenados. Cuando SQL Server 2005 vuelve a compilar procedimientos almacenados, sólo se compila la instrucción que ha causado la recompilación, en lugar del procedimiento completo. En consecuencia, SQL Server utiliza los valores de parámetros como existen en la instrucción recompilada al volver a generar un plan de consultas. Esos valores pueden diferir de los que se pasaron originalmente al procedimiento.
Forzar la recompilación de un procedimiento almacenado
SQL Server proporciona tres formas de forzar que un procedimiento almacenado se vuelva a compilar:
El procedimiento almacenado del sistema sp_recompile fuerza que se vuelva a compilar un procedimiento almacenado la próxima vez que se ejecute.
La creación de un procedimiento almacenado que especifique la opción WITH RECOMPILE en su definición indica a SQL Server que no guarde en memoria caché ningún plan para ese procedimiento, que vuelve a compilarse cada vez que se ejecuta. Utilice la opción WITH RECOMPILE cuando los procedimientos almacenados adopten parámetros cuyos valores varíen considerablemente entre distintas ejecuciones del procedimiento almacenado, de modo que se creen distintos planes de ejecución cada vez. Esta opción no se utiliza con mucha frecuencia y provoca que el procedimiento almacenado se ejecute más lentamente, ya que debe compilarse de nuevo cada vez que se ejecuta.
Si sólo desea que se vuelvan a compilar consultas individuales dentro del procedimiento almacenado, y no la totalidad del procedimiento almacenado, especifique la sugerencia de consulta de RECOMPILE dentro de cada consulta que desee volver a compilar. Este comportamiento imita el comportamiento de la recompilación de nivel de instrucción de SQL Server expuesto anteriormente, pero además de utilizar los valores de parámetro actuales del procedimiento almacenado, la sugerencia de consulta de RECOMPILE también utiliza los valores de las variables locales de dentro del procedimiento almacenado durante la compilación de la instrucción. Utilice esta opción cuando se utilicen valores atípicos o temporales sólo en un subconjunto de consultas que pertenecen al procedimiento almacenado. Para obtener más información, vea Sugerencia de consulta (Transact-SQL).Puede forzar que se vuelva a compilar el procedimiento almacenado si especifica la opción WITH RECOMPILE al ejecutarlo. Utilice esta opción únicamente si el parámetro que está suministrando es atípico o si los datos han cambiado considerablemente desde que se creó el procedimiento.
[!NOTA] Si se elimina o se cambia el nombre de un objeto al que se hace referencia desde un procedimiento, se devuelve un error durante la ejecución del procedimiento almacenado. No obstante, si un objeto al que se hace referencia en un procedimiento almacenado se reemplaza por otro objeto con el mismo nombre, el procedimiento se ejecuta sin necesidad de que se vuelva a crear.
Para volver a compilar un procedimiento almacenado cuando se ejecuta de nuevo
Vea también
Conceptos
Crear procedimientos almacenados (motor de base de datos)
Crear procedimientos almacenados CLR
Ejecutar procedimientos almacenados (motor de base de datos)
Modificar procedimientos almacenados
Ver procedimientos almacenados
Eliminar procedimientos almacenados