Come si può aggiungere una colonna con un valore predefinito a una tabella esistente in 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.
Nome opzionale del vincolo:
Se lasciate fuori CONSTRAINT D_SomeTable_SomeCol
allora SQL Server genererà automaticamente
un Default-Contraint con un nome divertente come: DF__SomeTa__SomeC__4FB7FEF6
Dichiarazione opzionale With-Values:
Il WITH VALUES
è necessario solo quando la tua colonna è Nullable
e vuoi che il valore predefinito sia usato per i record esistenti;
Se la tua colonna è NON NULL
, allora userà automaticamente il valore di default
per tutti i record esistenti, sia che tu specifichi WITH VALUES
o no.
Come funzionano gli inserimenti con un Default-Constraint:
Se inserisci un record in QualcheTabella
e non non specifichi il valore di QualcheCol
, allora sarà Predefinito a 0
;
Se inserisci un record e specifichi il valore di SomeCol
'come NULL
(e la tua colonna permette i null),
allora il Default-Constraint non sarà usato e NULL
sarà inserito come valore.
Le note sono state basate sul grande feedback di tutti qui sotto.
Ringraziamenti speciali a:
@Yatrix, @WalterStabosz, @YahooSerious, e @StackMan per i loro commenti.
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
L'inclusione del DEFAULT riempie la colonna nelle righe esistenti con il valore predefinito, quindi il vincolo NOT NULL non viene violato.
ALTER TABLE ADD ColumnName {Column_Type} Constraint
L'articolo MSDN ALTER TABLE (Transact-SQL) ha tutta la sintassi di alter table.