Wie kann ich alle Datensätze aus allen Tabellen meiner Datenbank löschen? Kann ich das mit einem SQL-Befehl machen oder benötige ich einen SQL-Befehl pro Tabelle?
sql
sql-server
delete-row
multi-table-delete
AndreyAkinshin
quelle
quelle
EXEC sp_MSForEachTable 'DBCC CHECKIDENT(''?'', RESEED, 0)'
nach dem LÖSCHEN VON eine zu machen, um alle Identitätsspalten auf 0 zurückzusetzen.DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'...
. Für mich hat gearbeitet:EXEC sp_MSForEachTable 'SET QUOTED_IDENTIFIER ON; DELETE FROM ?'
Normalerweise verwende ich nur den undokumentierten Prozess sp_MSForEachTable
Siehe auch: Löschen Sie alle Daten in der Datenbank (wenn Sie FKs haben)
quelle
create database testing; GO use testing; create table t1 (i int primary key) create table t2(i int primary key,p int references t1)
quelle
Ich bin mir bewusst, dass dies spät ist, aber ich stimme AlexKuznetsovs Vorschlag zu, die Datenbank zu skripten, anstatt die Daten aus den Tabellen zu entfernen. Wenn die
TRUNCATE
Lösung nicht funktioniert und Sie zufällig über eine große Datenmenge verfügen, kann das Ausgeben von (protokollierten)DELETE
Anweisungen lange dauern, und Sie erhalten Bezeichner, die nicht neu gesetzt wurden (dh eineINSERT
Anweisung in eine Tabelle mit EineIDENTITY
Spalte würde Ihnen eine ID von 50000 anstelle einer ID von 1) geben.Um eine ganze Datenbank zu skripten, klicken Sie in SSMS mit der rechten Maustaste auf die Datenbank und wählen Sie
TASKS
->Generate scripts
:Klicken Sie
Next
auf, um den Startbildschirm des Assistenten zu überspringen, und wählen Sie dann aus, welche Objekte Sie skripten möchten:Auf dem
Set scripting options
Bildschirm können Sie Einstellungen für die Skripterstellung auswählen, z. B. ob 1 Skript für alle Objekte oder separate Skripte für die einzelnen Objekte generiert werden sollen und ob die Datei in Unicode oder ANSI gespeichert werden soll:Der Assistent zeigt eine Zusammenfassung an, mit der Sie überprüfen können, ob alles wie gewünscht ist, und schließen, indem Sie auf "Fertig stellen" klicken.
quelle
Zuerst müssen Sie alle Trigger deaktivieren:
Führen Sie dieses Skript aus: (Entnommen aus diesem Beitrag Vielen Dank an @SQLMenace)
Dieses Skript erzeugt
DELETE
Anweisungen in der richtigen Reihenfolge. Ausgehend von referenzierten Tabellen und dann von referenzierenden TabellenKopieren Sie die
DELETE FROM
Anweisungen und führen Sie sie einmal ausTrigger aktivieren
Übernehmen Sie die Änderungen:
quelle
In der Regel ist es viel schneller, alle Objekte in der Datenbank auszuskripten und ein leeres Objekt zu erstellen, das aus Tabellen gelöscht oder abgeschnitten werden kann.
quelle
Unten ein Skript, mit dem ich alle Daten aus einer SQL Server-Datenbank entfernt habe
quelle
quelle
Als alternative Antwort können Sie, wenn Sie Visual Studio SSDT oder möglicherweise Red Gate Sql Compare verwenden, einfach einen Schema-Vergleich durchführen, ein Skript erstellen und die alte Datenbank löschen (möglicherweise erstellen Sie zuerst eine Sicherung, falls es einen Grund gibt, den Sie benötigen diese Daten) und erstellen Sie dann eine neue Datenbank mit dem vom Vergleichstool erstellten Skript. Während dies in einer sehr kleinen Datenbank möglicherweise mehr Arbeit bedeutet, ist es in einer sehr großen Datenbank viel schneller, die Datenbank einfach zu löschen, als sich mit den verschiedenen Auslösern und Einschränkungen zu befassen, die möglicherweise in der Datenbank vorhanden sind.
quelle
Ja, es ist möglich, mit einer einzigen Codezeile zu löschen
quelle