Ich verwende Microsoft SQL Server 2008. Meine Frage lautet: Wie lösche ich mehrere Tabellen mit einem gemeinsamen Präfix in einer Abfrage?
so etwas wie die Tabellennamen:
LG_001_01_STLINE,
LG_001_02_STFICHE
Ich verwende Microsoft SQL Server 2008. Meine Frage lautet: Wie lösche ich mehrere Tabellen mit einem gemeinsamen Präfix in einer Abfrage?
so etwas wie die Tabellennamen:
LG_001_01_STLINE,
LG_001_02_STFICHE
Mit den Katalogsichten können Sie einen String aufbauen, zB:
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += '
DROP TABLE '
+ QUOTENAME(s.name)
+ '.' + QUOTENAME(t.name) + ';'
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
PRINT @sql;
-- EXEC sp_executesql @sql;
Natürlich gibt es potenzielle Fallstricke. Wenn diese Tabellen beispielsweise Fremdschlüsselbeziehungen aufweisen, müssen Sie sie entweder zuerst löschen oder die Ausgabe so anordnen, dass die Tabellen in einer bestimmten Reihenfolge gelöscht werden.
Um nur die Liste der Tabellen abzurufen, verwenden Sie:
SELECT s.name, t.name
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name LIKE 'LG_001%';
Ich habe diese Abfrage ausgeführt und dann die Ergebnisse wieder in das Abfragefenster eingefügt, um alle Tabellen zu löschen:
Wenn Sie alle Tabellen löschen möchten, aber die Namen beibehalten möchten, die mit A, B, C oder D beginnen:
quelle
Auf diese Weise können Sie eine viel größere Anzahl von Tabellen löschen.
quelle
Ich mag dieses, das ich schrieb:
quelle
STATIC
und / oderLOCAL FAST_FORWARD
] ( sqlperformance.com/2012/09/t-sql-queries/cursor-options ) verwenden. (3) Sie sollten keine veralteten, abwärtskompatiblen Ansichten wie verwendensysindexes
. (4) In Ihrem Skript wird davon ausgegangen, dass sich alle Tabellen imdbo
Schema befinden (oder, schlimmer noch, im Standardschema des ausführenden Benutzers, was möglicherweise gar nicht der Fall istdbo
).Dies kann folgendermaßen geschehen
execute
:quelle
dbo
soll und 2) die Namen niemals a enthalten dürfen]
- beides mag im Fall des OP durchaus zutreffen, aber es wäre immer noch gut Erwähnen Sie diese Annahmen, da die sich daraus ergebenden Einschränkungen für andere Menschen möglicherweise nicht ganz offensichtlich sind. Wie ich zu Beginn bereits sagte, ist mein Hauptproblem bei dieser Antwort, dass nur ein bereits vorhandener Vorschlag wiederholt wird, ohne dass ein neuer Wert hinzugefügt wird.Führen Sie die obige Abfrage aus und speichern Sie die Ergebnisse in einer CSV-Datei. Öffnen Sie dann diese CSV in einem Notizblock. Führen Sie dann Strg + H aus, um das Schema durch DROP TABLE SCHEMA zu ersetzen, das Ihnen alle Drop-Abfragen gibt. Kopieren Sie diese große SQL-Datei, fügen Sie sie in Ihr SQL-Tool ein, und führen Sie sie aus
wenn Ihre Ergebnisse sind
Nach dem Ersetzen sieht es so aus
quelle
PRINT
Anweisung tun . Wie ist Ihre Antwort besser als die Antwort mit der höchsten Bewertung?