sexta-feira, 19 de novembro de 2010

Verificando se uma tabela temporária existe em um banco de dados

Ao trabalhar com scripts complexos, principalmente aqueles que podem ser executados mais de uma vez em uma mesma sessão no banco de dados, pode ser necessário verificar se uma tabela temporária já existe na base de dados.

Essa verificação não é tão trivial para tabelas temporárias quanto para as tabelas normais. Para tabelas normais, basta executar um SELECT na view sysobjects (para o SQL Server 2000 e 2005) ou na view INFORMATION_SCHEMA.TABLES (para o SQL Server 2008) filtrando o nome da tabela.

As views de sistema citadas acima guardam apenas informações sobre a base de dados a que pertencem. Sendo assim, não será possível utilizar a mesma verificação para as tabelas temporárias, uma vez que estas são armazanadas no tempdb.

Para contornar esta situação, pode-se verificar se uma tabela temporária existe através da função object_id(), que retorna o identificador único de um objeto no sistema cujo nome deve ser passado por parâmetro para a função. Caso o objeto não seja encontrado, a função retornará NULL.

No exemplo abaixo, verifica-se a existência da tabela #tmp e esta é excluída antes de ser criada novamente.

IF object_id('tempdb..#tmpPessoa') IS NOT NULL 
BEGIN
     DROP TABLE #tmpPessoa

END

CREATE TABLE #tmpPessoa
(
    id INT,

    nome VARCHAR(100)
)
GO


Observe que foi necessário passar o caminho completo da tabela temporária para que esta fosse encontrada (..).

2 comentários:

Postar um comentário