O DTS pode testar a presença da tabela MS-Access
-
09-06-2019 - |
Pergunta
Eu tenho um banco de dados Access no qual elimino a tabela e crio-a novamente.No entanto, preciso ser capaz de testar a tabela caso ela seja descartada, mas não criada (ou seja,quando alguém interrompe o pacote DTS logo após ele iniciar -roll-eyes- ).Se eu estivesse fazendo isso no banco de dados SQL, faria apenas:
IF (EXISTS (SELECT * FROM sysobjects WHERE name = 'Table-Name-to-look-for'))
BEGIN
drop table 'Table-Name-to-look-for'
END
Mas como faço isso para um banco de dados Access?
Resposta opcional:existe uma maneira de fazer com que o pacote DTS ignore o erro e simplesmente vá para a próxima etapa em vez de verificar se ele existe?
Servidor SQL 2000
Solução
Não tenho certeza se você pode consultar a tabela de objetos do sistema em um banco de dados Access de um pacote DTS.
Se isso não funcionar, por que não tentar fazer um SELECT * na tabela do Access em questão e depois pegar o erro se falhar?
Outras dicas
Tente o mesmo T-SQL, mas no MS ACCESS a tabela de objetos sys é chamada:MSysObjects.
Experimente isto:
SELECT * FROM MSysObjects WHERE Name = 'your_table';
e veja se funciona a partir daí.
Você pode dar uma olhada nessas tabelas se for em Ferramentas -> Opções -> Exibir (uma guia) -> e verificar Objetos Ocultos, Objetos do Sistema.Então você pode ver ambos.Se você abrir a tabela, deverá ver os nomes das tabelas, consultas, etc.Não altere isso manualmente ou o banco de dados poderá entrar em pânico :)
Martinho.
PD:Seu If Exists também deve verificar o tipo de objeto:
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[Your_Table_Name]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
O Microsoft Access possui uma tabela de sistema chamada MSysObjects que contém uma lista de todos os objetos de banco de dados, incluindo tabelas.Objetos de tabela possuem Tipo 1, 4 e 6.
É importante referenciar o tipo:
...Onde Name='TableName' e digite (1,4,6)
Caso contrário, o que é retornado pode ser algum objeto diferente de uma tabela.