Domanda Aggiungere una colonna con un valore predefinito a una tabella esistente in SQL Server


Come si può aggiungere una colonna con un valore predefinito a una tabella esistente in SQL Server 2000 / SQL Server 2005?


2291
2017-09-18 12:30


origine


risposte:


Sintassi:

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

Esempio:

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.

Gli appunti:

Nome vincolo facoltativo:
Se si lascia fuori CONSTRAINT D_SomeTable_SomeCol quindi SQL Server si autogenererà
un Prescrizione di Prescrizione con un Nome divertente come: DF__SomeTa__SomeC__4FB7FEF6

Dichiarazione facoltativa con valori:
Il WITH VALUES è necessario solo quando la tua colonna è Nullable
e si desidera il valore predefinito utilizzato per i record esistenti.
Se la tua colonna è NOT NULL, quindi utilizzerà automaticamente il valore predefinito
per tutti i record esistenti, indipendentemente dalla specifica WITH VALUES o no.

In che modo gli inserti funzionano con un vincolo predefinito:
Se inserisci un record in SomeTable e fai non Specificare SomeColvalore, quindi verrà impostato su 0.
Se si inserisce un record e Specificare SomeColil valore di NULL (e la tua colonna consente i null),
allora il vincolo predefinito sarà non essere usato e NULL sarà inserito come valore.

Le note erano basate sull'ottimo feedback di tutti di seguito.
Ringraziamenti speciali a:
@Yatrix, @WalterStabosz, @YahooSerious e @StackMan per i loro commenti.


2916
2017-09-18 12:34



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

L'inclusione del PREDEFINITO riempie la colonna esistente righe con il valore predefinito, quindi il vincolo NOT NULL non viene violato.


868
2017-09-18 12:31



Quando si aggiunge un colonna nullable, WITH VALUES garantirà che il valore DEFAULT specifico venga applicato alle righe esistenti:

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

196
2018-04-12 17:40



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

115
2017-09-18 12:39



ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

104
2017-08-05 03:28



Fai attenzione quando la colonna che stai aggiungendo ha a NOT NULL vincolo, ma non ha un DEFAULT vincolo (valore). Il ALTER TABLE la dichiarazione fallirà in quel caso se la tabella ha delle righe in essa. La soluzione è rimuovere il NOT NULL vincolo dalla nuova colonna o fornire a DEFAULT vincolo per questo.


84
2017-09-24 16:03



La versione più semplice con solo due linee

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

78
2018-05-25 14:50



Uso:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

64
2017-12-09 17:45



Se si desidera aggiungere più colonne, è possibile farlo in questo modo, ad esempio:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

55
2017-10-14 18:38