Não.
Isso costumava ser verdade há muito tempo (e não é mais, pelo menos desde o SQL Server 2000), ou nunca era verdade e seu DBA apenas confundiu sua recomendação com a seguinte :
É importante agrupar todas as instruções DDL (como a criação de índices) para tabelas temporárias no início de um procedimento armazenado. Colocando essas instruções DDL juntas, compilações desnecessárias devido a alterações de esquema podem ser evitadas.
Você pode encontrar outra explicação sobre o raciocínio por trás desta recomendação nesta página .
Se dermos uma olhada neste Microsoft KB , verificamos que a causa de uma recompilação de procedimento armazenado pode ser uma das seguintes (SQL Server 2005+):
- Esquema alterado.
- Estatísticas alteradas.
- Recompile o DNR.
- Definir opção alterada.
- A tabela temporária foi alterada.
- Conjunto de linhas remoto alterado.
- Para permissões de navegação alteradas.
- O ambiente de notificação da consulta foi alterado.
- A visualização MPI foi alterada.
- As opções do cursor foram alteradas.
- Com opção de recompilação.
Declarar uma variável - mesmo uma variável de tabela (ie @table_variable
) - não pode disparar nenhum desses eventos, obviamente, porque declarar uma variável não conta como DDL . Uma variável (mesmo uma variável de tabela) é um objeto temporário usado exclusivamente para sua programação T-SQL. É por isso que as variáveis da tabela não obtêm estatísticas e não são vinculadas por transações . Declarar uma variável (tabela ou não) não pode acionar uma recompilação de proc.
Criar uma tabela temporária (ou seja #temp_table
) ou um índice, no entanto, é DDL que afeta a definição física do banco de dados. Tabelas e índices temporários são objetos "reais" com estatísticas e controle transacional; portanto, criá-los pode disparar qualquer um dos eventos 1, 2 ou 5 da lista acima e, assim, acionar uma recompilação de proc.