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.
Dúvidas ou sugestões comentem aí...
Postar um comentário

Postagens mais visitadas deste blog

[Kettle] - Ajuste de problema com horário de verão

[eXo] - Remover janela de solicitação de Registro

Pegando informações de Sessão no Oracle e equivalente no MSSQL