Dans SQL Server, j'ai une nouvelle colonne sur une table:
ALTER TABLE t_tableName
ADD newColumn NOT NULL
Cela échoue car je spécifie NOT NULL sans spécifier de contrainte par défaut. La table ne doit pas avoir de contrainte par défaut.
Pour contourner cela, je pourrais créer la table avec la contrainte par défaut, puis la supprimer.
Cependant, il ne semble pas y avoir de moyen de spécifier que la contrainte par défaut doit être nommée dans le cadre de cette instruction, donc ma seule façon de m'en débarrasser est d'avoir une procédure stockée qui la recherche dans le sys.default_constraints table.
C'est un peu compliqué / verbeux pour une opération qui est susceptible de se produire souvent. Quelqu'un a-t-il de meilleures solutions pour cela?
NOT NULL
adjacent au type de données? Il peut être syntaxiquement valide de le mettre après la contrainte, mais il semble déroutant de le mettre là.la source
Je voudrais ajouter quelques détails, car les réponses existantes sont plutôt minces :
L'astuce la plus importante est la suivante: vous ne devriez jamais créer une contrainte sans nom explicite!
Le plus gros problème avec les contraintes sans nom : lorsque vous exécutez cela sur différentes machines client, vous obtiendrez des noms différents / aléatoires sur chacun.
Tout futur script de mise à niveau sera un véritable casse-tête ...
Le conseil général est:
DF_TableName_ColumnName
pour une contrainte par défautCK_TableName_ColumnName
pour une contrainte de contrôleUQ_TableName_ColumnName
pour une contrainte uniquePK_TableName
pour une contrainte de clé primaireLa syntaxe générale est
Essayez ceci ici
Vous pouvez ajouter plus de contraintes à chaque colonne et vous pouvez ajouter des contraintes supplémentaires tout comme vous ajoutez des colonnes après une virgule:
--insérez des données
la source
Essayez comme ci-dessous le script-
la source