-
Tatsächlich ist die Methode zum Löschen von Daten in der Datenbank nicht kompliziert. Warum sollte ich mir hier zunächst die Löschung aller Daten in der Datenbank vorstellen? geraten in eine Endlosschleife. Tatsächlich ist die Methode zum Löschen von Daten in der Datenbank nicht kompliziert. Warum sollte ich mich hier mit dem Löschen aller Daten in der Datenbank befassen? Zweitens wird hier die inoffizielle gespeicherte Prozedur sp_MSForEachTable von Microsoft verwendet.
Vielleicht haben viele Leser und Freunde so etwas erlebt: Sie möchten eine leere Datenbank basierend auf der Entwicklungsdatenbank bereinigen, können diese jedoch aufgrund des mangelnden Gesamtverständnisses der Datenbankstruktur beim Löschen von Datensätzen in einer Tabelle nicht löschen Da es möglicherweise Fremdschlüsseleinschränkungen gibt, besteht eine gemeinsame Datenbankstruktur aus einer Haupttabelle und einer Untertabelle. In diesem Fall müssen Sie im Allgemeinen zuerst die Datensätze der Untertabelle und dann die Datensätze der Haupttabelle löschen.
Wenn es um das Löschen von Datensätzen geht, fallen mir oft die Anweisungen delete und truncate ein. Wenn jedoch Einschränkungen zwischen zwei oder mehr Tabellen bestehen, können diese beiden Anweisungen fehlschlagen, und das Schlimmste ist, dass diese beiden Befehle nur ausgeführt werden können jeweils einen Tisch. Was sollten Sie also tun, wenn Sie wirklich alle Datensätze in der SQL Server-Datenbank löschen möchten? Es gibt zwei Möglichkeiten:
1. Löschen Sie eine nach der anderen. Diese Methode ist sehr unrealistisch, wenn viele Tabellen vorhanden sind, aber viele Einschränkungen bestehen Finden Sie dann heraus, welche Tabelle zuerst gelöscht werden soll, welche Tabelle als nächstes gelöscht werden soll und welche Tabelle zuletzt gelöscht werden soll.
2. Deaktivieren Sie alle Einschränkungen, löschen Sie alle Daten und aktivieren Sie schließlich die Einschränkungen. Auf diese Weise müssen Sie keine Zeit und Energie aufwenden, um Einschränkungen zu studieren. Sie müssen nur eine einfache gespeicherte Prozedur schreiben, um diese Aufgabe automatisch abzuschließen.
Anhand dieser beiden Optionen ist nicht schwer zu erkennen, dass die zweite Option die einfachste und effektivste ist. Wie kann man sie also umsetzen?
Zuerst müssen Sie Code schreiben, um alle Tabellen zu durchlaufen. Hier empfehle ich eine gespeicherte Prozedur sp_MSForEachTable, da es in der offiziellen Dokumentation von Microsoft keine Beschreibung dieser gespeicherten Prozedur gibt und viele Entwickler möglicherweise noch nichts davon gehört haben, sodass Sie danach suchen können Die meisten Lösungen im Internet sind sehr kompliziert. Da es kein offizielles Dokument gibt, denken manche Leute, dass dieser Speicherprozess instabil sein könnte, und sie werden ihn psychologisch ablehnen, aber das ist nicht der Fall. Schauen wir uns ein vollständiges Skript an:
PROZEDUR ERSTELLEN sp_DeleteAllData
ALS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'LÖSCHEN VON ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GEHEN
Dieses Skript erstellt eine gespeicherte Prozedur mit dem Namen sp_DeleteAllData. Die dritte Anweisung löscht tatsächlich alle Daten. Die letzte Anweisung zeigt die Datensätze in jeder Tabelle an. Diese Aussage kann weggelassen werden. Ich möchte nur bestätigen, ob alle Tabellen gelöscht wurden.
Sie können diese gespeicherte Prozedur auf jeder Datenbank ausführen, natürlich nicht auf der generierten Datenbank, aber machen Sie es mir nicht übel, dass ich es Ihnen nicht gesagt habe. Sichern Sie auf jeden Fall zuerst die Datenbank, verwenden Sie die Sicherungsdatenbank zum Wiederherstellen und führen Sie dann die gespeicherte Prozedur aus , haha, selbst wenn es sich um eine große Datenbank handelt, wird es nicht lange dauern, bis Ihre Datenbank zu einer leeren Datenbank wird, was ein bisschen beängstigend ist!