Question Ajouter une colonne avec une valeur par défaut à une table existante dans SQL Server


Comment une colonne avec une valeur par défaut peut-elle être ajoutée à une table existante SQL Server 2000 / SQL Server 2005?


2291
2017-09-18 12:30


origine


Réponses:


Syntaxe:

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

Exemple:

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.

Remarques:

Nom de contrainte facultatif:
Si vous omettez CONSTRAINT D_SomeTable_SomeCol SQL Server va alors générer automatiquement
une contrainte par défaut avec un drôle de nom comme: DF__SomeTa__SomeC__4FB7FEF6

Déclaration facultative With-Values:
le WITH VALUES est nécessaire uniquement lorsque votre colonne est Nullable
et vous voulez la valeur par défaut utilisée pour les enregistrements existants.
Si votre colonne est NOT NULL, alors il utilisera automatiquement la valeur par défaut
pour tous les enregistrements existants, si vous spécifiez WITH VALUES ou pas.

Comment les insertions fonctionnent avec une contrainte par défaut:
Si vous insérez un enregistrement dans SomeTable et fait ne pas Spécifier SomeColde la valeur, alors il sera par défaut 0.
Si vous insérez un enregistrement et Spécifier SomeColLa valeur de NULL (et votre colonne autorise les valeurs nulles),
alors la contrainte par défaut sera ne pas être utilisé et NULL sera inséré en tant que valeur.

Les notes étaient basées sur les commentaires de tout le monde ci-dessous.
Merci spécial à:
@Yatrix, @WalterStabosz, @YahooSerious et @StackMan pour leurs commentaires.


2917
2017-09-18 12:34



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

L'inclusion de la DÉFAUT remplit la colonne dans existant lignes avec la valeur par défaut, donc la contrainte NOT NULL n'est pas violée.


868
2017-09-18 12:31



Lorsque vous ajoutez un colonne nullable, WITH VALUES garantira que la valeur DEFAULT spécifique est appliquée aux lignes existantes:

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



Attention quand la colonne que vous ajoutez a un NOT NULL contrainte, mais n'a pas DEFAULT contrainte (valeur). le ALTER TABLE L'instruction échouera dans ce cas si la table contient des lignes. La solution consiste soit à retirer NOT NULL contrainte de la nouvelle colonne, ou fournir un DEFAULT contrainte pour cela.


84
2017-09-24 16:03



La version la plus basique avec deux lignes seulement

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

78
2018-05-25 14:50



Utilisation:

-- 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



Si vous voulez ajouter plusieurs colonnes, vous pouvez le faire de cette façon par exemple:

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