-
En fait, la méthode de suppression des données dans la base de données n'est pas compliquée. Pourquoi devrais-je m'en soucier ? Tout d'abord, ce que je présente ici est de supprimer toutes les données de la base de données. Parce que les données peuvent former des contraintes mutuelles, l'opération de suppression peut. tomber dans une boucle infinie. En fait, la méthode de suppression des données dans la base de données n'est pas compliquée. Pourquoi devrais-je m'en soucier ? Tout d'abord, ce que je présente ici est de supprimer toutes les données de la base de données, car les données peuvent former des contraintes mutuelles, l'opération de suppression. peut tomber dans une boucle infinie. Deuxièmement, la procédure stockée non officielle sp_MSForEachTable de Microsoft est utilisée ici.
Peut-être que de nombreux lecteurs et amis ont vécu ce genre de chose : ils veulent nettoyer une base de données vide basée sur la base de données de développement, mais en raison du manque de compréhension globale de la structure de la base de données, lors de la suppression d'enregistrements dans une table, ils ne peuvent pas les supprimer. car il peut y avoir des contraintes de clé étrangère. Une structure de base de données commune est une table principale et une sous-table. Dans ce cas, vous devez généralement supprimer les enregistrements de la sous-table, puis supprimer les enregistrements de la table principale.
Lorsqu'il s'agit de supprimer des enregistrements de données, les instructions delete et truncate viennent souvent à l'esprit. Cependant, s'il existe des contraintes entre deux ou plusieurs tables, ces deux instructions peuvent échouer, et le plus terrible, ce sont ces deux commandes. une table à la fois. Alors, que devez-vous faire lorsque vous souhaitez vraiment supprimer tous les enregistrements de la base de données SQL Server ? Il existe deux options :
1. Supprimer un par un dans l'ordre. Cette méthode est très irréaliste lorsqu'il y a beaucoup de tables, même s'il n'y a pas beaucoup de tables mais qu'il y a beaucoup de contraintes, il faut quand même consacrer beaucoup de temps et d'énergie à étudier la contrainte. Découvrez ensuite quelle table supprimer en premier, quelle table supprimer ensuite et quelle table supprimer en dernier.
2. Désactivez toutes les contraintes, supprimez toutes les données et enfin activez les contraintes. De cette façon, vous n'avez pas à consacrer du temps et de l'énergie à étudier les contraintes. Il vous suffit d'écrire une procédure stockée simple pour effectuer automatiquement cette tâche.
A partir de ces deux options, il n’est pas difficile de voir que la deuxième option est la plus simple et la plus efficace. Alors, lorsque l’on utilise la deuxième option, comment la mettre en œuvre ?
Tout d'abord, vous devez écrire du code pour parcourir toutes les tables. Ici, je recommande une procédure stockée sp_MSForEachTable, car il n'y a aucune description de cette procédure stockée dans la documentation officielle de Microsoft, et de nombreux développeurs n'en ont peut-être pas entendu parler, vous pouvez donc la rechercher. sur Internet. La plupart des solutions sont très compliquées. Certains peuvent penser qu'en l'absence de document officiel, ce processus de stockage peut être instable et ils le rejetteront psychologiquement, mais ce n'est pas le cas. Jetons un coup d'œil à un script complet :
CRÉER UNE PROCÉDURE sp_DeleteAllData
COMME
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONTRAINTE TOUT'
EXEC sp_MSForEachTable 'ALTER TABLE ? DÉSACTIVER TOUT DÉCLENCHEMENT'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? VÉRIFIER TOUTES LES CONTRAINTES'
EXEC sp_MSForEachTable 'ALTER TABLE ?
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
ALLER
Ce script crée une procédure stockée nommée sp_DeleteAllData. Les deux premières instructions désactivent respectivement les contraintes et les déclencheurs. La troisième instruction supprime respectivement toutes les données. La dernière instruction affiche les enregistrements dans chaque table. cette déclaration peut être omise. Je veux juste confirmer si toutes les tables ont été effacées.
Vous pouvez exécuter cette procédure stockée sur n'importe quelle base de données, bien sûr pas sur la base de données générée, mais ne me blâmez pas de ne pas vous le dire. Quoi qu'il en soit, sauvegardez d'abord la base de données, utilisez la base de données de sauvegarde pour restaurer, puis exécutez la procédure stockée ! , haha, même s'il s'agit d'une grande base de données, il ne faudra pas longtemps pour que votre base de données devienne une base de données vide, ce qui fait un peu peur !