2009-11-22 13 views
13

Ich muss eine Lösch-Flag-Spalte zu allen 40 Benutzertabellen in einer Datenbank hinzufügen. Ich könnte ein Skript schreiben, um sys.tables zu durchlaufen, aber ich dachte, ich würde prüfen, ob jemand eine bessere Lösung oder vordefinierte SQL für dieses Szenario hat.Hinzufügen einer Spalte zu allen Benutzertabellen in t-sql

Antwort

31

Es ist ein nicht dokumentiert, aber gut bekannten Verfahren sp_msforeachtable gespeichert:

exec sp_msforeachtable 'alter table ? add flag bit not null default 0'; 
+0

+1 aber ... seraphym für eine Art und Weise zu fragen, eine Spalte zu entfernen . Obwohl Ihre Anweisung leicht überschrieben werden könnte, um sie fallen zu lassen, müsste der Name der Zielspalte für alle Tabellen einheitlich sein. –

+3

psasik, seraphym möchte jeder Tabelle eine Spalte mit dem Namen 'löschen' hinzufügen und keine Spalte aus jeder Tabelle löschen. –

+0

sehr cool, danke für Ihre Hilfe! – seraphym

11

Nein, es ist eine manuelle Schleife.

Sie können auch eine einzelne SQL-Anweisung natürlich aufbauen ...

SELECT 
    'ALTER TABLE ' + T.name + ' ADD foo int NULL' 
FROM 
    sys.tables AS T 
WHERE 
    T.is_ms_shipped = 0 

Oder die undokumentierte

EXEC sys.sp_MSforeachtable 'ALTER TABLE ? ADD foo int NULL' 
Verwandte Themen