Ich möchte nicht den Namen aller Tabellen eingeben, um alle zu löschen. Ist es mit einer Abfrage möglich?
sql
sql-server
Majid
quelle
quelle
Antworten:
Verwenden Sie die Ansicht INFORMATION_SCHEMA.TABLES , um die Liste der Tabellen abzurufen. Generieren Sie Drop-Skripte in der select-Anweisung und löschen Sie sie mit Dynamic SQL:
Sys.Tables Version
Hinweis: Wenn
foreign Keys
zwischen Tabellen eine Definition vorliegt, führen Sie zuerst die folgende Abfrage aus, um alleforeign keys
in Ihrer Datenbank vorhandenen zu deaktivieren .Weitere Informationen finden Sie hier .
quelle
[sys]
Schemaansichten halten, wenn keine Portabilität über rdbms 'erforderlich ist. stackoverflow.com/a/3654313/251174Print @sql
vorher verwendenexec
. Dannsp_executesql
Wenn Sie nur eine SQL-Abfrage verwenden möchten, um alle Tabellen zu löschen, können Sie Folgendes verwenden:
Dies ist eine versteckte gespeicherte Prozedur auf einem SQL Server und wird für jede Tabelle in der Datenbank ausgeführt, mit der Sie verbunden sind.
Hinweis: Möglicherweise müssen Sie die Abfrage einige Male ausführen, um alle Tabellen aufgrund von Abhängigkeiten zu löschen.
Hinweis 2: Um den ersten Hinweis zu vermeiden, überprüfen Sie vor dem Ausführen der Abfrage zunächst, ob Fremdschlüsselbeziehungen zu einer Tabelle bestehen. Wenn dies der Fall ist, deaktivieren Sie einfach die Fremdschlüsseleinschränkung, indem Sie die folgende Abfrage ausführen:
quelle
Wenn Sie nicht eingeben möchten, können Sie die Anweisungen folgendermaßen erstellen:
Kopieren Sie dann und fügen Sie es in ein neues SSMS-Fenster ein, um es auszuführen.
quelle
QUOTENAME
auch verwenden, was ordentlich aussieht.'DROP TABLE ' + QUOTENAME(name) + ';'
Sie können auch das folgende Skript verwenden, um alles zu löschen, einschließlich des folgenden:
https://michaelreichenbach.de/how-to-drop-everything-in-a-mssql-database/
quelle
Ich würde nur eine kleine Änderung an der Antwort und Verwendung
QUOTENAME()
von @ NoDisplayName für dieTABLE_NAME
Spalte vornehmen und auch dieTABLE_SCHEMA
Spalteneinfassung einschließen, in der die Tabellen nicht imdbo
Schema enthalten sind.Oder verwenden Sie
sys
Schemaansichten (gemäß @ swashecks Kommentar):quelle
[sys]
Schemaansichten bleiben, wenn keine Portabilität über rdbms 'erforderlich ist. stackoverflow.com/a/3654313/251174Als Folge der Antwort von Dave.Gugg wäre dies der Code, den jemand benötigen würde, um alle DROP TABLE-Zeilen in MySQL abzurufen:
quelle
Am einfachsten ist es, die gesamte Datenbank zu löschen und erneut zu erstellen:
Das ist alles.
quelle
Wenn jemand anderes ein Problem mit der Lösung der besten Antwort hatte (einschließlich des Deaktivierens von Fremdschlüsseln), ist hier eine andere Lösung von mir :
quelle
Nicht ganz 1 Abfrage, immer noch ziemlich kurz und bündig:
quelle
Verwenden Sie das folgende Skript für
drop
alleconstraints
:Führen Sie dann Folgendes aus, um alle Tabellen zu löschen:
Dies funktionierte für mich in der Azure SQL-Datenbank, wo
'sp_msforeachtable'
nicht verfügbar war!quelle
Ich weiß, dass diese Frage sehr alt ist, aber jedes Mal, wenn ich diesen Code benötige. Übrigens, wenn Sie Tabellen und Ansichten sowie Funktionen und VERFAHREN haben, können Sie alles mit diesem Skript löschen. Warum poste ich dieses Skript? denn wenn du alle Tabellen löschst, musst du alle Ansichten löschen und wenn du Funktionen und VERFAHREN hast, musst du sie auch löschen.
Ich hoffe, es wird jemandem helfen
quelle