-
Na verdade, o método de exclusão de dados no banco de dados não é complicado. Por que devo me preocupar com isso? Primeiro, o que apresento aqui é excluir todos os dados do banco de dados. cair em um loop infinito. Na verdade, o método de exclusão de dados no banco de dados não é complicado. Por que devo me preocupar com isso? Primeiro, o que estou apresentando aqui é excluir todos os dados do banco de dados. pode cair em um loop infinito Em segundo lugar, o procedimento armazenado sp_MSForEachTable não oficial da Microsoft é usado aqui.
Talvez muitos leitores e amigos tenham experimentado esse tipo de coisa: querem limpar um banco de dados vazio com base no banco de dados de desenvolvimento, mas devido à falta de compreensão geral da estrutura do banco de dados, ao excluir registros de uma tabela, não conseguem excluí-los porque pode haver restrições de chave estrangeira. Uma estrutura de banco de dados comum é uma tabela principal e uma subtabela. Nesse caso, geralmente é necessário excluir primeiro os registros da subtabela e, em seguida, excluir os registros da tabela principal.
Quando se trata de excluir registros de dados, as instruções delete e truncate geralmente vêm à mente. No entanto, se houver restrições entre duas ou mais tabelas, essas duas instruções podem falhar, e o mais terrível é que esses dois comandos só podem ser operados. uma mesa de cada vez. Então, o que você deve fazer quando realmente deseja excluir todos os registros do banco de dados SQL Server. Existem duas opções:
1. Excluir uma por uma em ordem. Este método é muito irrealista quando há muitas tabelas. Mesmo que não haja muitas tabelas, mas haja muitas restrições, você ainda precisará gastar muito tempo e energia para estudar a restrição. relacionamentos. Em seguida, descubra qual tabela excluir primeiro, qual tabela excluir em seguida e qual tabela excluir por último.
2. Desative todas as restrições, exclua todos os dados e, finalmente, habilite as restrições. Dessa forma, você não precisa gastar tempo e energia estudando restrições. Você só precisa escrever um procedimento armazenado simples para concluir esta tarefa automaticamente.
Destas duas opções, não é difícil perceber que a segunda opção é a mais simples e eficaz. Então, ao usar a segunda opção, como implementá-la?
Primeiro, você precisa escrever um código para percorrer todas as tabelas. Aqui eu recomendo um procedimento armazenado sp_MSForEachTable, porque não há descrição desse procedimento armazenado na documentação oficial da Microsoft e muitos desenvolvedores podem não ter ouvido falar dele, então você pode pesquisá-lo. na Internet. A maioria das soluções são muito complicadas. Algumas pessoas podem pensar que, por não existir um documento oficial, este processo de armazenamento pode ser instável e irão rejeitá-lo psicologicamente, mas não é o caso. Vamos dar uma olhada em um script completo:
CRIAR PROCEDIMENTO sp_DeleteAllData
COMO
EXEC sp_MSForEachTable 'ALTER TABLE?
EXEC sp_MSForEachTable 'ALTER TABLE?
EXEC sp_MSForEachTable 'DELETE FROM?'
EXEC sp_MSForEachTable 'ALTER TABLE? VERIFICAR CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE?
EXEC sp_MSFOREACHTABLE 'SELECT * FROM?'
IR
Este script cria um procedimento armazenado chamado sp_DeleteAllData. As duas primeiras instruções desabilitam restrições e gatilhos, respectivamente. A terceira instrução realmente exclui todos os dados. esta declaração pode ser omitida. Só quero confirmar se todas as tabelas foram limpas.
Você pode executar este procedimento armazenado em qualquer banco de dados, é claro, não no banco de dados gerado, mas não me culpe por não lhe contar. De qualquer forma, faça backup do banco de dados primeiro, use o banco de dados de backup para restaurar e, em seguida, execute o procedimento armazenado! , haha, mesmo que seja um banco de dados grande, não demorará muito para que seu banco de dados se torne um banco de dados vazio, o que é um pouco assustador!