Resolução e compilação de nome diferida
Quando um procedimento armazenado é criado, as instruções no procedimento são analisadas quanto à exatidão sintática. Se um erro sintático for encontrado na definição do procedimento, será retornado um erro e o procedimento armazenado não será criado. Se as instruções estiverem sintaticamente corretas, o texto do procedimento armazenado será armazenado na exibição de catálogo sys.sql_modules.
Quando um procedimento armazenado for executado pela primeira vez, o processador da consulta lerá o texto do procedimento armazenado da exibição de catálogo sys.sql_modules e verificará se os nomes dos objetos usados pelo procedimento estão presentes. Esse processo é chamado de resolução de nome diferida porque os objetos de tabela referenciados pelo procedimento armazenado não existem quando o procedimento é criado, apenas quando ele é executado.
Observação |
---|
A resolução de nome diferida só pode ser usada ao referenciar objetos de tabela inexistentes. Todos os outros objetos devem existir no momento em que o procedimento armazenado é criado. Por exemplo, ao referenciar uma tabela inexistente em um procedimento armazenado você não pode listar colunas inexistentes para essa tabela. |
No estágio de resolução, Microsoft SQL Server também executa outras atividades de validação (por exemplo, a verificação da compatibilidade de um tipo de dados de coluna com variáveis). Se os objetos referenciados pelo procedimento armazenado estiverem ausentes quando o procedimento for executado, a execução do procedimento armazenado será interrompida ao chegar à instrução que faz referência ao objeto ausente. Nesse caso, ou se forem localizados outros erros na fase de resolução, um erro será retornado.
Observação |
---|
Se um objeto referenciado por um procedimento armazenado for excluído ou renomeado, será retornado um erro quando o procedimento armazenado for executado. Entretanto, se um objeto referenciado em um procedimento armazenado for substituído por um objeto do mesmo nome, o procedimento armazenado será executado sem precisar ser recriado. Por exemplo, se o procedimento armazenado Proc1 referenciar a tabela Test1 e Test1 for excluída e uma tabela diferente chamada Test1 for criada, Proc1 fará referência à nova tabela. O procedimento armazenado não precisa ser recriado. |
Se uma execução de procedimento passar com sucesso pelo estágio de resolução, o otimizador de consultas Microsoft SQL Server analisará as instruções Transact-SQL no procedimento armazenado e criará um plano de execução. O plano de execução descreve o método mais rápido de executar o procedimento armazenado, baseado em informações como:
A quantidade de dados nas tabelas.
A natureza e a presença de índices nas tabelas e a distribuição de dados nas colunas indexadas.
Os operadores de comparação e valores de comparação usados nas condições da cláusula WHERE.
A presença de junções e palavra-chave UNION, GROUP BY e ORDER BY.
Depois que o otimizador de consultas analisar esses fatores no procedimento armazenado, ele colocará o plano de execução na memória. O processo de analisar o procedimento armazenado e criar um plano de execução é chamado de compilação. O plano de execução otimizado na memória é usado para executar a consulta. O plano de execução permanece na memória até que SQL Server seja reiniciado ou até que o espaço seja necessário para armazenamento de outro objeto.
Quando o procedimento armazenado for executado subseqüentemente, SQL Server reusará o plano de execução existente caso ainda esteja na memória. Se o plano de execução não estiver mais na memória, um novo plano de execução será criado.
Consulte também