W jaki sposób można dodać kolumnę z wartością domyślną do istniejącej tabeli w SQL Server 2000 / SQL Server 2005?
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
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.
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.
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.
ALTER TABLE ADD ColumnName {Column_Type} Constraint
Artykuł MSDN ALTER TABLE (Transact-SQL) zawiera całą składnię alter table.