Wie lösche ich alle Zeilen aus allen Tabellen in einer SQL Server-Datenbank?
sql-server-2005
Michał Powaga
quelle
quelle
Antworten:
Beachten Sie, dass TRUNCATE nicht funktioniert, wenn Sie eine referenzielle Integrität festgelegt haben.
In diesem Fall funktioniert dies:
quelle
USE [MyDataBase]
? Würde die obige Idee funktionieren, wenn sie irgendwie angepasst würde? ... Weil ich nicht alle vom SQL Server gespeicherten DBs löschen möchte.In meinem letzten Projekt bestand meine Aufgabe darin, eine gesamte Datenbank mithilfe der SQL-Anweisung zu bereinigen, wobei jede Tabelle viele Einschränkungen wie Primärschlüssel und Fremdschlüssel aufweist. Es gibt mehr als 1000 Tabellen in der Datenbank, so dass es nicht möglich ist, eine Löschabfrage für jede einzelne Tabelle zu schreiben.
Durch die Verwendung einer gespeicherten Prozedur mit dem Namen sp_MSForEachTable können wir auf einfache Weise Code für jede einzelne Tabelle in einer einzelnen Datenbank verarbeiten. Dies bedeutet, dass ein einzelner T-SQL-Befehl oder ein anderer T-SQL-Befehl für jede Tabelle in der Datenbank verarbeitet wird.
Führen Sie die folgenden Schritte aus, um alle Tabellen in einer SQL Server-Datenbank abzuschneiden:
Schritt 1 - Deaktivieren Sie alle Einschränkungen für die Datenbank mithilfe der folgenden SQL-Abfrage:
EXEC sys.sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
Schritt 2: Führen Sie eine Lösch- oder Kürzungsoperation für jede Tabelle der Datenbank aus, indem Sie den folgenden SQL-Befehl verwenden:
Schritt 3: Aktivieren Sie alle Einschränkungen für die Datenbank mithilfe der folgenden SQL-Anweisung:
quelle
sql server azure
?Ich musste alle Zeilen löschen und tat es mit dem nächsten Skript:
Hoffe das hilft!
quelle
Hier ist eine Lösung, die:
INFORMATION_SCHEMA.TABLES
eine bestimmte DatenbankSELECTS
Tabellen basierend auf einigen Suchkriteriensysdiagrams
und__RefactorLog
Ich habe es zunächst versucht
EXECUTE sp_MSforeachtable 'TRUNCATE TABLE ?'
, aber dadurch wurden meine Diagramme gelöscht.quelle
ALTER TABLE
Bit zum Deaktivieren von Einschränkungen schlägt fehl.In meinem Fall musste ich QUOTED_IDENTIFIER aktivieren. Dies führte zu einer geringfügigen Änderung der obigen Antwort von Mark Rendle:
quelle
DELETE failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
quelle
Sie können alle Zeilen aus allen Tabellen mit einem von Rubens vorgeschlagenen Ansatz löschen oder einfach alle Tabellen löschen und neu erstellen. Es ist immer eine gute Idee, die vollständigen Skripte zur Datenbankerstellung zu haben, damit dies die einfachste / schnellste Methode ist.
quelle
Für einige Anforderungen müssen wir möglicherweise bestimmte Tabellen überspringen. Ich habe das folgende Skript geschrieben, um einige zusätzliche Bedingungen zum Filtern der Tabellenliste hinzuzufügen. Das folgende Skript zeigt auch die Anzahl vor und nach dem Löschen an.
quelle
Diese Antwort baut auf Zach Smiths Antwort auf, indem auch die Identitätsspalte zurückgesetzt wird :
Hier ist die Abfrage:
quelle
quelle
Wenn Sie die gesamte Tabelle löschen möchten, müssen Sie die nächste SQL-Anweisung befolgen
quelle