2009-07-27 3 views
1

Kann dies auch in großen Mengen durchgeführt werden? Damit alle Spalten in der Tabelle so eingestellt werden können, dass das Flag 'NOT NULL' ausgeschaltet wird?Gibt es eine Möglichkeit, eine Spalte zu ändern, um 'NOT NULL' auszuschalten?

+0

für eine MSSQL-Datenbank nur um zu klären;) – Stephen

+0

Welche Version von SQL Server? Wird einen Unterschied machen, um das ideale Skript zu durchlaufen alle ... – AakashM

+0

Ich bin besorgt, warum jemand dies in loser Schüttung tun möchte. Ich würde niemals eine Veränderung dieser Größenordnung in Erwägung ziehen, ohne die Auswirkungen auf jeden Teil meines Systems zu untersuchen. Sie können viele Dinge brechen, wenn Sie Nullen plötzlich erlauben, wo sie vorher nicht waren. Und es gibt normalerweise einen Grund, warum das Feld Nullen nicht erlaubt. – HLGEM

Antwort

3

Sie können eine ALTER TABLE xxx ALTER COLUMN-Anweisung verwenden, um die Spalte neu zu definieren.


Ist dies eine einmalige Sache, die Sie ausführen müssen, können Sie einen Trick verwenden, indem Sie eine Abfrage zu schreiben, die die Spaltennamen für die Tabelle aus dem System/dba Tabelle abfragt und erzeugen Ihre Alte Aussage. Sie kopieren die Ergebnisse der Abfrage (Ihre 15 oder wie viele alter-Anweisungen) in Ihr Skript und führen es einfach aus. Ich habe nicht viel Erfahrung MSSQL noch eine Umgebung jetzt testen auf, aber etwas entlang der Linien von:

SELECT 
    'ALTER TABLE ' + table_name + ' ALTER COLUMN ' + column_name + ' ' + data_type 
FROM INFORMATION_SCHEMA.Columns 
WHERE TABLE_NAME = 'xxx' 

, wo Sie den data_type Teil manipulieren müssen hinzufügen/entfernen Sie den NULL Text

+0

Cool, gibt es irgendeine Möglichkeit, dies in einer Schleife zu tun, um jede Spalte von zu durchlaufen Wenn ja, können Sie dann den Code erklären/anzeigen? – Stephen

+0

Die obige Abfrage gibt mehrere ALTER TABLE-Skripte aus, eines für jede Spalte, die nacheinander alle Spalten ändern –

0

Ja, Sie können es tun. Lesen Sie Bücher online.

Nein, es kann nicht in großen Mengen durchgeführt werden, aber Sie können mehrere Anweisungen in einer einzigen Abfrage ausführen.

+0

Das Problem ist, dass die Tabelle sooo viele Spalten hat, die für immer dauern würde :( – Stephen

+0

Nun, wenn die Tabelle so viele Spalten hat, dass Sie es nicht manuell tun können, dann sollten Sie * wirklich * Ihr Tischdesign überdenken :-(. Wie auch immer, Sie könnten die ALTER-Anweisung entweder in T-SQL (sollte machbar sein) oder nur in ein Skript schreiben, das die ALTER-Anweisungen generiert – sleske

0

Rufen Sie eine Liste der Spalten und eine Vorlage ab, die die erforderliche SQL enthält, und verwenden Sie ein Tool zum Erstellen der Anweisungen für Sie. Ich habe dies in Excel schon einmal gemacht, aber Sie könnten ein echtes Programm mit Ihrer Sprache Ihrer Wahl schreiben.

1

es in der Masse zu tun, wenn ...

Verwenden SSMS Designer ein Skript zu generieren. Dadurch wird die Tabelle neu erstellt (temporäre Tabelle erstellen, Daten kopieren, alte Tabelle löschen, temporäre Tabelle umbenennen).

Ansonsten ist es einen nach dem anderen TABLE ALTER ...

0

Wenn die Anzahl der Tabellen ist niedrig genug, ich bin mit SSMSE (SQL Server Management Studio Express), indem Sie auf jeden Tisch Entwurfsmodus eingeben und Überprüfen Sie Lassen Sie NULL in den erforderlichen Spalten.

Für eine größere Anzahl von Tabellen versuchen Sie die Antwort von ChrisCM.

Verwandte Themen