3261 Stimmen

Hinzufügen einer Spalte mit einem Standardwert zu einer vorhandenen Tabelle in SQL Server

Wie kann ich eine Spalte mit einem Standardwert zu einer bestehenden Tabelle in SQL-Server 2000 / SQL Server 2005 ?

12 Stimmen

Warum gibt es auf diese Frage 41 Antworten? Wenn ich sie durchsehe, sagen die meisten das Gleiche. Warum werden diese nicht entfernt? Diese Frage braucht nur maximal 3 Antworten.

0 Stimmen

ALTER TABLE SomeTable ADD SomeCol Bit NULL --O NOT NULL. CONSTRAINT D_SomeTable_SomeCol --Wenn ausgelassen, wird ein Default-Constraint Name automatisch generiert. DEFAULT (0)--Optionale Standard-Beschränkung. WITH VALUES --Hinzufügen, wenn die Spalte nullbar ist und Sie den Standardwert für existierende Datensätze haben wollen.

1 Stimmen

@MichaelZ. - 43 Antworten jetzt .....

4101voto

James Boother Punkte 39953

Syntax:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Beispiel:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Anmerkungen:

Optionaler Einschränkungsname:
Wenn Sie auslassen CONSTRAINT D_SomeTable_SomeCol dann generiert SQL Server automatisch
    ein Standard-Contraint mit einem lustigen Namen wie: DF__SomeTa__SomeC__4FB7FEF6

Optionale With-Values-Anweisung:
Die WITH VALUES wird nur benötigt, wenn Ihre Spalte nullbar ist
    und Sie möchten, dass der Standardwert für bereits vorhandene Datensätze verwendet wird.
Wenn Ihre Säule NOT NULL dann wird automatisch der Standardwert verwendet.
    für alle existierenden Datensätze, unabhängig davon, ob Sie WITH VALUES oder nicht.

Wie Inserts mit einer Standard-Beschränkung funktionieren:
Wenn Sie einen Datensatz in SomeTable und tun no Geben Sie an. SomeCol Wertes, dann wird er standardmäßig auf 0 .
Wenn Sie einen Datensatz einfügen und Geben Sie an. SomeCol Wert als NULL (und Ihre Spalte erlaubt Nullen),
    dann wird das Default-Constraint no verwendet werden und NULL wird als Wert eingefügt.

Die Notizen beruhen auf dem großartigen Feedback, das wir unten erhalten haben.
Besonderen Dank an:
    @Yatrix, @WalterStabosz, @YahooSerious, und @StackMan für ihre Kommentare.

362 Stimmen

Denken Sie daran, dass, wenn die Spalte nullbar ist, null der Wert ist, der für vorhandene Zeilen verwendet wird.

20 Stimmen

@Thecrocodilehunter Nullable column bedeutet, dass Sie Null für den Spaltenwert einfügen können. Wenn es sich nicht um eine nullable Spalte handelt, müssen Sie einen Wert dieses Datentyps einfügen. Bei vorhandenen Datensätzen wird also Null eingefügt, bei neuen Datensätzen wird Ihr Standardwert eingefügt, sofern nicht anders angegeben. Ist das sinnvoll?

46 Stimmen

Diese Antwort gefällt mir etwas besser als die von dbugger, weil sie die Standardbeschränkung explizit nennt. Eine Standardbeschränkung wird immer noch mit der Syntax von dbugger erstellt, aber ihr Name wird automatisch generiert. Die Kenntnis des genauen Namens ist beim Schreiben von DROP-CREATE-Skripten praktisch.

1205voto

dbugger Punkte 14779
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Die Einbeziehung der DEFAULT füllt die Spalte in bestehende Zeilen mit dem Standardwert, so dass die NOT NULL-Beschränkung nicht verletzt wird.

103 Stimmen

Nur zur Klarstellung - wenn "NOT NULL" im Befehl weggelassen wird, wird der Wert für bestehende Zeilen NICHT aktualisiert und bleibt NULL. Wenn "NOT NULL" im Befehl enthalten ist, wird der Wert für vorhandene Zeilen aktualisiert, um dem Standardwert zu entsprechen.

286voto

phunk_munkie Punkte 2671

Beim Hinzufügen einer löschbare Spalte , WITH VALUES sorgt dafür, dass der spezifische DEFAULT-Wert auf die vorhandenen Zeilen angewendet wird:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

160voto

ddc0660 Punkte 3962
ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO

150voto

Evan V Punkte 1757
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X