Gibt es eine Abfrage (einen Befehl), um alle Tabellen in einer Datenbank in einem Vorgang abzuschneiden? Ich möchte wissen, ob ich dies mit einer einzigen Abfrage tun kann.
MS SQL Server 2005+ (PRINT für die tatsächliche Ausführung entfernen...)
EXEC sp_MSforeachtable 'PRINT ''TRUNCATE TABLE ?'''
Wenn Ihre Datenbankplattform INFORMATION_SCHEMA-Ansichten unterstützt, nehmen Sie die Ergebnisse der folgenden Abfrage und führen Sie sie aus.
SELECT 'TRUNCATE TABLE ' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Versuchen Sie dies für MySQL:
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES
Das Hinzufügen eines Semikolons zum Concat erleichtert die Verwendung z.B. in der mysql Workbench.
SELECT Concat('TRUNCATE TABLE ', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES
Wenn Sie SQL Server 2005 verwenden, gibt es eine versteckte gespeicherte Prozedur, mit der Sie einen Befehl oder eine Reihe von Befehlen für alle Tabellen in einer Datenbank ausführen können. So rufen Sie TRUNCATE TABLE
mit dieser gespeicherten Prozedur auf:
EXEC [sp_MSforeachtable] @command1="TRUNCATE TABLE ?"
Hier ist ein guter Artikel, der das Thema weiter ausführt.
Für MySql könnten Sie jedoch mysqldump verwenden und die Optionen --add-drop-tables
und --no-data
angeben, um alle Tabellen zu löschen und zu erstellen, ohne die Daten zu berücksichtigen. etwa so:
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE]
Eine Idee könnte sein, die Tabellen einfach zu löschen und neu zu erstellen?
EDIT:
@Jonathan Leffler: Richtig
Anderer Vorschlag (oder falls Sie nicht ALLE Tabellen abschneiden müssen):
Warum nicht einfach eine einfache gespeicherte Prozedur erstellen, um bestimmte Tabellen abzuschneiden?
CREATE PROCEDURE [dbo].[proc_TruncateTables]
AS
TRUNCATE TABLE Table1
TRUNCATE TABLE Table2
TRUNCATE TABLE Table3
GO