No.
Esto solía ser cierto hace mucho tiempo (y ya no lo es, al menos desde SQL Server 2000), o nunca fue cierto y su DBA simplemente confundió su recomendación con la siguiente :
Es importante agrupar todas las instrucciones DDL (como crear índices) para tablas temporales al comienzo de un procedimiento almacenado. Al colocar estas declaraciones DDL juntas, se pueden evitar compilaciones innecesarias debido al cambio de esquema.
Puede encontrar otra explicación del razonamiento detrás de esta recomendación en esta página .
Si echamos un vistazo a este KB de Microsoft , vemos que la causa de la recompilación de un procedimiento almacenado puede ser una de las siguientes (SQL Server 2005+):
- Esquema cambiado.
- Estadísticas cambiadas.
- Recompilar DNR.
- Establecer opción modificada.
- La tabla temporal ha cambiado.
- Conjunto de filas remotas cambiado.
- Para permisos de navegación cambiados.
- El entorno de notificación de consulta cambió.
- La vista MPI ha cambiado.
- Opciones de cursor cambiadas.
- Con opción de recompilación.
Declarar una variable, incluso una variable de tabla (es decir @table_variable
), no puede desencadenar ninguno de estos eventos, obviamente, porque declarar una variable no cuenta como DDL . Una variable (incluso una variable de tabla) es un objeto temporal utilizado exclusivamente para su programación T-SQL. Es por eso que las variables de tabla no obtienen estadísticas y no están vinculadas por transacciones . Declarar una variable (tabla o no) no puede desencadenar una recompilación de proceso.
#temp_table
Sin embargo, crear una tabla temporal (es decir ) o un índice es un DDL que afecta la definición física de la base de datos. Las tablas e índices temporales son objetos "reales" con estadísticas y control transaccional, por lo tanto, crearlos podría activar cualquiera de los eventos 1, 2 o 5 en la lista anterior y, por lo tanto, desencadenar una recompilación de proceso.