Script para remover todas as tabelas do SQL Server

Quando estamos em desenvolvendo um projeto grandes, e.g. ERP precisamos muitas vezes testar script de criação/atualização do base de dados para poder entregar ao nosso cliente.

Para resolver esse problema poderia ser excluído o banco de dados e depois recriado, mas para isso precisamos mexer com a questão de permissão de acesso ao banco e muitas vezes não temos essa permissão no servidor do cliente, por esse motivo através de muita pesquisa fiz o comando abaixo para excluir todas as tabelas e restrições do banco de dados onde está sendo executado o comando.

O ideal é executar o comando através de uma transação, ainda mais se você ainda está aprendendo a mexer no banco e não sabe se existe o backup hehehe

SET NOCOUNT ON;

 DECLARE @Tabela TABLE (Seq INT, Id INT, Name sysname);
 DECLARE @Loop INT, @Qt INT;

 -- Enquanto existir foreignkey Excluir os objetos que não são referenciados
WHILE
  (SELECT COUNT(*) FROM sys.foreign_keys) > 0 
  BEGIN
	DELETE @Tabela;

SET @Loop = 1;

INSERT INTO @Tabela
SELECT ROW_NUMBER() OVER(ORDER BY t.Name) AS Seq,
       t.object_id AS Id,
       t.name
FROM sys.tables t;


SET @Qt = @@ROWCOUNT;

 WHILE @Loop <= @Qt BEGIN DECLARE @sql VARCHAR(100) = '';

 IF NOT EXISTS
  (SELECT 1
   FROM sys.foreign_keys fk
   WHERE fk.referenced_object_id =
       (SELECT Id
        FROM @Tabela o
        WHERE o.Seq = @Loop)) BEGIN
SELECT @sql = 'DROP TABLE ' + o.name
FROM @Tabela o
WHERE o.Seq = @Loop;

 PRINT 'Droping ' + @sql;

 EXECUTE(@sql);

 END;


SET @Loop = @Loop +1;

 END;

 END;

 -- Por garantia executa mais um drop geral, pois pode restar tabelas
EXEC sp_MSforeachtable 'DROP TABLE ?; ' ;

 GO

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *