2010-09-22 44 views
96

Dans SQL Server, j'ai une nouvelle colonne sur une table:Puis-je créer une contrainte par défaut nommée dans une instruction de colonne add dans SQL Server?

ALTER TABLE t_tableName 
    ADD newColumn NOT NULL 

Cela échoue parce que je précise NOT NULL sans spécifier une contrainte par défaut. La table ne doit pas avoir de contrainte par défaut. Pour contourner ce problème, je peux créer la table avec la contrainte par défaut, puis la supprimer.

Cependant, il ne semble pas y avoir moyen de spécifier que la contrainte par défaut doit être nommée dans le cadre de cette instruction, donc mon seul moyen de m'en débarrasser est d'avoir une procédure stockée qui la regarde dans la table sys.default_constraints.

Ceci est un peu brouillon/verbeux pour une opération qui est susceptible de se produire beaucoup. Quelqu'un at-il de meilleures solutions pour cela?

Répondre

149

Cela devrait fonctionner:

ALTER TABLE t_tableName 
    ADD newColumn VARCHAR(50) 
    CONSTRAINT YourContraintName DEFAULT '' NOT NULL 
+0

Works en 2012 aussi. Détails de Gory: http://msdn.microsoft.com/en-us/library/ms187742.aspx – adam77

1

Je pourrais créer la colonne sans le NOT NULL, exécuter une mise à jour sur la date existante, puis modifier la colonne pour avoir le NOT NULL. Je suis préoccupé par les implications en termes de performances, par exemple si cela se produisait sur une table de plusieurs millions de lignes, cela semble donc loin d'être idéal.

53
ALTER TABLE t_tableName 
    ADD newColumn int NOT NULL 
     CONSTRAINT DF_defaultvalue DEFAULT (1) 
+12

Je préfère ceci à la réponse acceptée car je peux abandonner la contrainte par défaut sans craindre de perdre la contrainte NOT NULL. – EleventhDoctor

+4

@EleventhDoctor Cela n'a aucun sens. Le NOT NULL ne fait pas partie de la contrainte et l'instruction drop fait simplement référence au nom de la contrainte. –

+4

@RogerWillcocks Vous avez raison, mais il est plus clair en lisant que NOT NULL est séparé de la contrainte. – deluxxxe