Dodawanie kolumny z wartością domyślną do istniejącej tabeli w SQL Server

W jaki sposób można dodać kolumnę z wartością domyślną do istniejącej tabeli w SQL Server 2000 / SQL Server 2005?

Rozwiązanie

Składnia:

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

Przykład:

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.

Uwagi:

Optional Constraint Name:
Jeśli pominiesz CONSTRAINT D_SomeTable_SomeCol to SQL Server automatycznie wygeneruje
    Default-Contraint o śmiesznej nazwie jak: DF__SomeTa__SomeC__4FB7FEF6

Opcjonalne oświadczenie With-Values:
Polecenie WITH VALUES jest potrzebne tylko wtedy, gdy kolumna jest Nullable
    i chcesz, aby wartość domyślna była używana dla istniejących rekordów.
Jeśli Twoja kolumna jest NOT NULL, wtedy automatycznie użyje wartości domyślnej
    dla wszystkich istniejących rekordów, niezależnie od tego, czy określisz WITH VALUES, czy nie.

Jak działają wstawki z domyślnym ograniczeniem:
Jeśli wstawiasz Rekord do JakiejśTabeli i nie określasz wartości JakiegośCola' wtedy domyślnie będzie to 0.
Jeśli wstawisz Rekord i podasz wartość SomeCol's jako NULL (a twoja kolumna pozwala na null),
    wtedy Default-Constraint będzie nie użyty i NULL zostanie wstawiony jako wartość.

Uwagi zostały oparte na wszystkich'wspaniałych opiniach poniżej.
Specjalne podziękowania dla:
    @Yatrix, @WalterStabosz, @YahooSerious, and @StackMan for their Comments.

Komentarze (9)
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Włączenie DEFAULT wypełnia kolumnę w istniejących wierszach wartością domyślną, więc ograniczenie NOT NULL nie jest naruszone.

Komentarze (8)
ALTER TABLE ADD ColumnName {Column_Type} Constraint

Artykuł MSDN ALTER TABLE (Transact-SQL) zawiera całą składnię alter table.

Komentarze (0)