Apagando Tabelas "Futuras" (acidentais) do módulo Contábil no MSSQL
Dias atrás publiquei no blog este artigo sobre apagar tabelas do módulo Contábil do CIGAM que foram criadas acidentalmente com sufixo de data no futuro. O artigo explica como realizar esta tarefa em banco Oracle, abaixo vou mostrar como realizar o mesmo procedimento no MSSQL:
select 'DROP TABLE ' + name + char(13) + char(10) + 'go'
from sys.tables
Where name like 'CCMC%'
and name not like 'CCMC20%'
and (select rowcnt
from sysindexes
where id=sys.tables.object_id
and indid = 1)>= 0 --Traz somente tabelas sem registros
order by name
A saída do script foi como esta:
DROP TABLE CCMC11999
go
DROP TABLE CCMC12000
go
DROP TABLE CCMC12001
go
DROP TABLE CCMC12002
go
DROP TABLE CCMC12003
go
DROP TABLE CCMC12004
go
DROP TABLE CCMC12005
go
DROP TABLE CCMC12006
go
DROP TABLE CCMC12007
go
DROP TABLE CCMC12008
go
DROP TABLE CCMC12009
go
DROP TABLE CCMCO
go
Observações:
- Copiei o resultado da saída do script e executei novamente, fazendo um drop sequencial de todas as tabelas que não deviam estar criadas ainda na base.
- Como o MSSQL utiliza o "enter" (CRLF) como finalizador de comandos utilizei o char(13) e char(10) para simular esta saída e complementei com o comando "GO".
- Reparem que precisei relacionar a tabela sys.tables com a sysindexes para recuperar o valor da coluna rowcnt, desta forma considerei que a tabela tem registros somente se o seu índice também tiver, o que é o esperado num banco de dados consistente.
Comentários