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 um comentário