3220 votes

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

Comment puis-je ajouter une colonne avec une valeur par défaut à une table existante dans SQL Server 2000 / SQL Server 2005 ?

1 votes

0 votes

Comment cette question peut-elle avoir 41 réponses ? En la parcourant, la plupart d'entre elles disent la même chose. Pourquoi ne sont-elles pas supprimées ? Cette question ne nécessite que 3 réponses maximum.

4049voto

James Boother Points 12945

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.

Notas:

Nom de la contrainte facultatif :
Si vous laissez de côté CONSTRAINT D_SomeTable_SomeCol alors le serveur SQL générera automatiquement
    une contrainte par défaut avec un nom amusant comme : DF__SomeTa__SomeC__4FB7FEF6

Déclaration facultative avec valeurs :
El WITH VALUES n'est nécessaire que lorsque votre colonne est Nullable.
    et vous voulez que la valeur par défaut soit 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, que 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 faire no Précisez SomeCol la valeur de l'utilisateur, alors il sera Défaut à 0 .
Si vous insérez un enregistrement y Précisez SomeCol en tant que NULL (et votre colonne autorise les nuls),
    alors la contrainte par défaut sera no être utilisé et NULL sera inséré comme valeur.

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

358 votes

Gardez à l'esprit que si la colonne est nullable, null sera la valeur utilisée pour les lignes existantes.

2 votes

@RichardCollette ce qu'est une colonne nullable. Si mon type de données est int ou varchar, il prend toujours null pour les lignes existantes même si je spécifie une valeur par défaut. Cela signifie-t-il que la valeur par défaut ne s'applique qu'aux nouveaux enregistrements ?

20 votes

@Thecrocodilehunter Une colonne nullable signifie que vous pouvez insérer un Null pour la valeur de la colonne. S'il ne s'agit pas d'une colonne nullable, vous devez insérer une valeur de ce type de données. Ainsi, pour les enregistrements existants, Null sera inséré dans ceux-ci et dans les nouveaux enregistrements, votre valeur par défaut sera insérée, sauf indication contraire. Cela vous paraît logique ?

1191voto

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

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

14 votes

Le problème avec cette réponse est que la valeur par défaut n'est valable que pour les nouveaux enregistrements. Les enregistrements existants auront toujours la valeur NULL.

135 votes

Vous constaterez que ce n'est pas le cas. Sinon, la contrainte serait violée.

38 votes

Les colonnes des lignes existantes sont remplies avec la valeur par défaut. Un petit test empirique le prouvera.

281voto

phunk_munkie Points 321

Lorsque vous ajoutez un colonne nullable , WITH VALUES permettra de s'assurer que la valeur par défaut 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

14 votes

C'est un point essentiel. Il est facile de supposer qu'une colonne avec une valeur de DEFAULT aura toujours une valeur - c'est-à-dire qu'elle ne sera pas NULL, même si NOT NULL n'est pas spécifié.

7 votes

@tkocmathla uh, je ne parlais pas de la BIT Je parlais de ce type de données particulier. BIT colonne . Regardez la réponse, la colonne est déclarée en tant que NOT NULL .

158voto

ddc0660 Points 2221
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

10 votes

Cela ne fonctionnera pas si la table a déjà du contenu, car la nouvelle colonne "not nullable" est créée avant la contrainte de valeur par défaut.

148voto

Evan V Points 606
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

14 votes

Cet ajout null!doit être non null avant

6 votes

@baaroz , ceci fonctionne avec NOT NULL : ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) NOT NULL DEFAULT 'SNUGGLES'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X