Kaip SQL Server 2000 / SQL Server 2005 į esamą lentelę įtraukti stulpelį su numatytąja reikšme?
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.
Neprivalomas apribojimo pavadinimas:
Jei nepateiksite CONSTRAINT D_SomeTable_SomeCol
, SQL Server automatiškai sukurs
numatytąją sąlygą su juokingu pavadinimu, pvz: DF__SomeTa__SomeC__4FB7FEF6
Vartojamasis With-Values teiginys:
WITH VALUES
reikalingas tik tada, kai stulpelis yra nulinis
ir norite, kad numatytoji reikšmė būtų naudojama esamiems įrašams.
Jei jūsų stulpelis yra NOT NULL
, automatiškai bus naudojama numatytoji reikšmė
visiems esamiems įrašams, nesvarbu, ar nurodysite WITH VALUES
, ar ne.
Kaip veikia įterpimai su numatytąja verte:
Jei įterpiate įrašą į SomeTable
ir nenurodote SomeCol
'reikšmės, ji bus numatytoji 0
.
Jei įterpiate Įrašą ir ir nurodote SomeCol
's reikšmę kaip NULL
(o jūsų stulpelis leidžia nulines reikšmes),
, tuomet numatytasis apribojimas nebus naudojamas ir kaip reikšmė bus įterpta NULL
.
Pastabos buvo parengtos atsižvelgiant į puikius visų žemiau pateiktus atsiliepimus.
Ypatinga padėka:
@Yatrix, @WalterStabosz, @YahooSerious ir @StackMan už pastabas.
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
Įtraukus DEFAULT, stulpelis egzistuojančiose eilutėse užpildomas numatytąja reikšme, todėl apribojimas NOT NULL nepažeidžiamas.
ALTER TABLE ADD ColumnName {Column_Type} Constraint
MSDN straipsnyje ALTER TABLE (Transact-SQL) pateikiama visa alter table sintaksė.