Wie kann ich einer vorhandenen Tabelle in SQL Server 2000 / SQL Server 2005 eine Spalte mit einem Standardwert hinzufügen ?
2767
Wie kann ich einer vorhandenen Tabelle in SQL Server 2000 / SQL Server 2005 eine Spalte mit einem Standardwert hinzufügen ?
Antworten:
Syntax:
Beispiel:
Anmerkungen:
Optionaler Einschränkungsname:
Wenn Sie
CONSTRAINT D_SomeTable_SomeCol
ihn weglassen,generiert SQL Server automatisch eine Standardbeschränkung mit einem lustigen Namen wie:
DF__SomeTa__SomeC__4FB7FEF6
Optionale With-Values-Anweisung:
Die Anweisung
WITH VALUES
wird nur benötigt, wenn Ihre Spalte auf Null gesetzt werden kannund der Standardwert für vorhandene Datensätze verwendet werden soll.
Wenn Ihre Spalte aktiviert ist
NOT NULL
, wird automatisch der Standardwertfür alle vorhandenen Datensätze verwendet, unabhängig davon, ob Sie dies angeben
WITH VALUES
oder nicht.Funktionsweise von
Einfügungen mit einer Standardbeschränkung: Wenn Sie einen Datensatz in den Wert von " Einfügen" einfügen
SomeTable
und diesen nicht angebenSomeCol
, wird er auf "Standard" gesetzt0
.Wenn Sie einen Datensatz einfügen und Geben Sie
SomeCol
‚s - Wert alsNULL
(und Ihre Spalte ermöglicht Nullen),dann wird die Standard-Constraint wird nicht verwendet werden und
NULL
wird als Wert eingefügt werden.Die Notizen basierten auf dem großartigen Feedback aller unten.
Besonderer Dank geht an:
@Yatrix, @WalterStabosz, @YahooSerious und @StackMan für ihre Kommentare.
quelle
NOT NULL
. Bitte versuchen Sie Folgendes:create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
Sie sehen 2 NULL-Werte für die Spalteb
.WITH VALUES
diese Option, um vorhandene nullfähige Zeilen zu aktualisieren. Siehe MSDN : "Wenn die hinzugefügte Spalte Nullwerte zulässt undWITH VALUES
angegeben wird, wird der Standardwert in der neuen Spalte gespeichert und zu vorhandenen Zeilen hinzugefügt."Durch die Aufnahme von DEFAULT wird die Spalte in vorhandenen Zeilen mit dem Standardwert gefüllt , sodass die NOT NULL-Einschränkung nicht verletzt wird.
quelle
Wenn eine Zugabe von Nullable - Spalte ,
WITH VALUES
wird sichergestellt , dass der spezifische Standardwert auf vorhandene Zeilen angewendet wird:quelle
DEFAULT
Einschränkung immer einen Wert hat - das heißt, nicht NULL, obwohlNOT NULL
nicht angegeben.BIT
Datentyp gesprochen, ich habe über diese bestimmteBIT
Spalte gesprochen . Schauen Sie sich die Antwort an, die Spalte wird als deklariertNOT NULL
.quelle
quelle
Beachten Sie, dass die Spalte, die Sie hinzufügen, eine
NOT NULL
Einschränkung aufweist, jedoch keineDEFAULT
Einschränkung (Wert). DieALTER TABLE
Anweisung schlägt in diesem Fall fehl, wenn die Tabelle Zeilen enthält. Die Lösung besteht darin, entweder dieNOT NULL
Einschränkung aus der neuen Spalte zu entfernen oder eineDEFAULT
Einschränkung dafür bereitzustellen .quelle
Die einfachste Version mit nur zwei Zeilen
quelle
Verwenden:
quelle
Wenn Sie mehrere Spalten hinzufügen möchten, können Sie dies folgendermaßen tun:
quelle
Verwenden:
Referenz: ALTER TABLE (Transact-SQL) (MSDN)
quelle
Um einer vorhandenen Datenbanktabelle eine Spalte mit einem Standardwert hinzuzufügen, können Sie Folgendes verwenden:
Hier ist eine andere Möglichkeit, einer vorhandenen Datenbanktabelle eine Spalte mit einem Standardwert hinzuzufügen.
Ein viel gründlicheres SQL-Skript zum Hinzufügen einer Spalte mit einem Standardwert finden Sie unten, einschließlich der Überprüfung, ob die Spalte vorhanden ist, bevor Sie sie hinzufügen. Überprüfen Sie auch die Einschränkung und löschen Sie sie, falls vorhanden. Dieses Skript benennt auch die Einschränkung, damit wir eine nette Namenskonvention haben können (ich mag DF_), und wenn nicht, gibt SQL uns eine Einschränkung mit einem Namen, der eine zufällig generierte Nummer hat. Es ist also schön, die Einschränkung auch benennen zu können.
Dies sind zwei Möglichkeiten, um einer vorhandenen Datenbanktabelle eine Spalte mit einem Standardwert hinzuzufügen.
quelle
Sie können die Sache mit T-SQL folgendermaßen machen.
Sie können SQL Server Management Studio auch verwenden, indem Sie im Menü Design mit der rechten Maustaste auf Tabelle klicken und den Standardwert auf Tabelle festlegen.
Wenn Sie außerdem allen Tabellen in der Datenbank dieselbe Spalte hinzufügen möchten (falls diese nicht vorhanden ist), verwenden Sie:
quelle
In SQL Server 2008-R2 gehe ich in den Entwurfsmodus - in einer Testdatenbank - und füge meine beiden Spalten mithilfe des Designers hinzu und nehme die Einstellungen über die GUI vor. Anschließend Right-Clickgibt der berüchtigte Benutzer die Option " Änderungsskript generieren " "!
Bang up öffnet ein kleines Fenster mit dem richtig formatierten Änderungsskript, das garantiert funktioniert. Drücken Sie die einfache Taste.
quelle
Alternativ können Sie einen Standard hinzufügen, ohne die Einschränkung explizit benennen zu müssen:
Wenn beim Erstellen dieser Einschränkung ein Problem mit vorhandenen Standardeinschränkungen auftritt, können diese entfernt werden durch:
quelle
Dies kann auch in der SSMS-GUI erfolgen. Ich zeige unten ein Standarddatum, aber der Standardwert kann natürlich beliebig sein.
(getdate())
oderabc
oder0
oder was auch immer Wert , den Sie in möchten Standardwert oder Binding Feld unten , wie dargestellt:quelle
Der MSDN-Artikel ALTER TABLE (Transact-SQL) enthält die gesamte Syntax der Änderungstabelle.
quelle
Beispiel:
quelle
Beispiel:
quelle
Erstellen Sie zunächst eine Tabelle mit dem Namen student:
Fügen Sie eine Spalte hinzu:
Die Tabelle wird erstellt und einer vorhandenen Tabelle mit einem Standardwert eine Spalte hinzugefügt.
quelle
Dies hat viele Antworten, aber ich habe das Bedürfnis, diese erweiterte Methode hinzuzufügen. Dies scheint viel länger zu dauern, ist jedoch äußerst nützlich, wenn Sie einer Tabelle mit Millionen von Zeilen in einer aktiven Datenbank ein NOT NULL-Feld hinzufügen.
Dadurch wird die Spalte als nullbares Feld hinzugefügt und mit dem Standardwert werden alle Felder auf den Standardwert aktualisiert (oder Sie können aussagekräftigere Werte zuweisen). Schließlich wird die Spalte so geändert, dass sie NICHT NULL ist.
Der Grund dafür ist, wenn Sie eine große Tabelle aktualisieren und ein neues Nicht-Null-Feld hinzufügen, das in jede einzelne Zeile geschrieben werden muss, und hiermit die gesamte Tabelle beim Hinzufügen der Spalte sperrt und dann alle Werte schreibt.
Diese Methode fügt die nullfähige Spalte hinzu, die von selbst viel schneller arbeitet, und füllt dann die Daten, bevor der Status nicht null festgelegt wird.
Ich habe festgestellt, dass das Ausführen der gesamten Sache in einer Anweisung eine unserer aktiveren Tabellen für 4-8 Minuten sperrt, und ziemlich oft habe ich den Prozess abgebrochen. Diese Methode dauert in der Regel nur wenige Sekunden und führt zu einer minimalen Verriegelung.
Wenn Sie eine Tabelle im Bereich von Milliarden von Zeilen haben, kann es sich außerdem lohnen, das Update wie folgt zu stapeln:
quelle
Versuche dies
quelle
SQL Server + Tabelle ändern + Spalte hinzufügen + Standardwert eindeutige Kennung
quelle
quelle
NOT EXISTS
Prüfung, bevor ich versuche, die Tabelle zu ändern. Sehr gute Lösung. Einige zusätzliche Kommentare dazu, wie dies funktioniert, würden es noch nützlicher machen.quelle
Fügen Sie einer Tabelle eine neue Spalte hinzu:
Zum Beispiel,
Wenn der Benutzer es automatisch inkrementieren möchte, dann:
quelle
Dies ist für SQL Server:
Beispiel:
Wenn Sie Einschränkungen hinzufügen möchten, gehen Sie wie folgt vor:
quelle
Dies kann durch den folgenden Code erfolgen.
quelle
Versuchen Sie es mit der folgenden Abfrage:
Dadurch wird der Tabelle eine neue Spalte hinzugefügt.
quelle
Aus dieser Abfrage können Sie eine Spalte mit einer Datentyp-Ganzzahl mit dem Standardwert 0 hinzufügen.
quelle
Nun, ich habe jetzt einige Änderungen an meiner vorherigen Antwort. Mir ist aufgefallen, dass keine der Antworten erwähnt wurde
IF NOT EXISTS
. Ich werde also eine neue Lösung dafür anbieten, da ich einige Probleme beim Ändern der Tabelle hatte.Hier
TaskSheet
ist der jeweilige Tabellenname undIsBilledToClient
die neue Spalte, die Sie einfügen möchten, sowie1
der Standardwert. Das heißt, in der neuen Spalte wird der Wert der vorhandenen Zeilen angegeben, daher wird dort automatisch eine festgelegt. Sie können jedoch den gewünschten Spaltentyp wie von mir verwendet ändernBIT
, sodass ich den Standardwert 1 eingebe.Ich schlage das obige System vor, weil ich auf ein Problem gestoßen bin. Also, wo liegt das Problem? Das Problem ist, wenn die
IsBilledToClient
Spalte in der Tabellentabelle vorhanden ist und Sie nur den Teil des unten angegebenen Codes ausführen, wird im SQL Server-Abfrage-Generator ein Fehler angezeigt. Wenn es jedoch nicht vorhanden ist, tritt beim ersten Ausführen kein Fehler bei der Ausführung auf.quelle