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

Comment ajouter une colonne avec une valeur par défaut à une table existante dans [SQL Server 2000][1] / [SQL Server 2005][2] ?

[1] : http://en.wikipedia.org/wiki/Microsoft_SQL_Server#Genesis [2] : http://en.wikipedia.org/wiki/Microsoft_SQL_Server#SQL_Server_2005

Solution

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.

Notes :

Nom de la contrainte facultatif:
Si vous omettez CONSTRAINT D_SomeTable_SomeCol alors SQL Server va générer automatiquement
&nbsp ; &nbsp ; une contrainte par défaut avec un nom bizarre comme : DF__SomeTa__SomeC__4FB7FEF6

Déclaration With-Values facultative:
Le WITH VALUES n'est nécessaire que lorsque votre colonne est Nullable
&nbsp ; &nbsp ; et que vous voulez que la valeur par défaut soit utilisée pour les enregistrements existants.
Si votre Colonne est NOT NULL, alors elle utilisera automatiquement la Valeur par défaut
&nbsp ; &nbsp ; pour tous les enregistrements existants, que vous spécifiez WITH VALUES ou non.

Comment les Insertions fonctionnent avec une Contrainte par Défaut:
Si vous insérez un enregistrement dans SomeTable et que vous ne spécifiez pas la valeur de SomeCol, alors celle-ci aura la valeur par défaut 0.
Si vous insérez un enregistrement et Spécifiez la valeur de SomeCol comme NULL (et que votre colonne autorise les nuls),
&nbsp ; &nbsp ; alors la contrainte par défaut ne sera pas utilisée et NULL sera inséré comme valeur.

Les notes ont été basées sur les excellents commentaires de tout le monde ci-dessous.
Remerciements spéciaux à:
&nbsp ; &nbsp ; @Yatrix, @WalterStabosz, @YahooSerious, et @StackMan pour leurs commentaires.

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

L'inclusion de DEFAULT remplit la colonne dans les lignes existantes avec la valeur par défaut, de sorte que la contrainte NOT NULL n'est pas violée.

Commentaires (8)
ALTER TABLE ADD ColumnName {Column_Type} Constraint

L'article MSDN [ALTER TABLE (Transact-SQL)][1] présente toute la syntaxe de l'altération d'une table.

[1] : http://msdn.microsoft.com/en-us/library/ms190273.aspx

Commentaires (0)