Estou tentando escrever um script que esvaziará completamente um banco de dados do SQL Server. Isto é o que eu tenho até agora:
USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
Quando o executo no Management Studio, recebo:
Comando (s) concluído (s) com sucesso.
mas quando eu atualizo a lista de tabelas, elas ainda estão lá. O que estou fazendo de errado?
Respostas:
Também não funciona para mim quando existem várias tabelas de chaves estrangeiras.
Encontrei o código que funciona e faz tudo o que você tenta (exclua todas as tabelas do seu banco de dados):
Você pode encontrar o post aqui . É o post do Groker.
fonte
Could not find stored procedure 'sp_MSForEachTable'.
dbo
. Se você tiver esquemas personalizados, precisará alterar osql
para:SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.CONSTRAINT_SCHEMA + '].[' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + ']'
sp_MSforeachtable
não está disponível no Azure. Use a resposta do @ CountZero.Você também pode excluir todas as tabelas do banco de dados usando apenas as ferramentas de interface do usuário MSSMS (sem usar o script SQL). Às vezes, esse caminho pode ser mais confortável (especialmente se for realizado ocasionalmente)
Eu faço isso passo a passo da seguinte maneira:
fonte
No SSMS:
Agora, isso eliminará tudo, incluindo o banco de dados. Certifique-se de remover o código dos itens que não deseja que sejam descartados. Como alternativa, na seção "Escolher objetos", em vez de selecionar o script do banco de dados inteiro, basta selecionar os itens que você deseja remover.
fonte
delete
é usado para excluir linhas de uma tabela. Você deve usar em seudrop table
lugar.fonte
NOCHECK CONSTRAINT
linha está errada?A resposta aceita não oferece suporte ao Azure. Ele usa um procedimento armazenado não documentado "sp_MSforeachtable". Se você receber um erro "o azure não pôde encontrar o procedimento armazenado 'sp_msforeachtable" ao executar ou simplesmente deseja evitar confiar em recursos não documentados (que podem ser removidos ou que sua funcionalidade foi alterada a qualquer momento), tente o abaixo.
Esta versão ignora a tabela de histórico de migração da estrutura da entidade "__MigrationHistory" e o "database_firewall_rules", que é uma tabela do Azure que você não terá permissão para excluir.
Levemente testado no Azure. Verifique se isso não tem efeitos indesejados no seu ambiente.
Tirado de:
https://edspencer.me.uk/2013/02/25/drop-all-tables-in-a-sql-server-database-azure-friendly/
http://www.sqlservercentral.com/blogs/sqlservertips/2011/10/11/remove-all-foreign-keys/
fonte
fonte
Você está quase certo, use:
mas na segunda linha, você pode precisar executar mais de uma vez até parar de receber erro:
Mensagem:
significa que todas as tabelas foram excluídas com sucesso.
fonte
Curto e grosso:
fonte
sp_msforeachtable
porsp_MSforeachtable
e recomendo adicionar umuse yourdatabase
como primeira linha. Funcionou como um encanto.O caminho do jejum é:
fonte
Parece que o comando deve estar sem o cobertor quadrado
fonte
Para mim, a maneira mais fácil:
fonte
Spot on !!
Você pode usar a consulta abaixo para remover todas as tabelas do banco de dados
EXEC sp_MSforeachtable @ command1 = "DROP TABLE?"
Feliz codificação!
fonte
Que tal descartar o banco de dados inteiro e criá-lo novamente? Isso funciona para mim.
fonte
Sei que agora é uma publicação antiga, mas tentei todas as respostas aqui em vários bancos de dados e descobri que todas elas funcionam às vezes, mas não o tempo todo, para várias peculiaridades (só posso assumir) do SQL Server.
Eventualmente, eu vim com isso. Eu testei isso em todos os lugares (em geral) que posso e funciona (sem nenhum procedimento de armazenamento oculto).
Para observação principalmente no SQL Server 2014. (mas a maioria das outras versões que tentei também parece funcionar bem).
Eu tentei enquanto loops e nulos etc etc, cursores e várias outras formas, mas eles sempre parecem falhar em alguns bancos de dados, mas não em outros, sem motivo óbvio.
Obter uma contagem e usá-la para iterar sempre parece funcionar em tudo que eu testei.
fonte
Para tabelas temporais , é um pouco mais complicado, pois pode haver algumas chaves estrangeiras e também a exceção:
Drop table operation failed on table XXX because it is not a supported operation on system-versioned temporal tables
O que você pode usar é:
fonte