Échec de la colonne ALTER TABLE DROP parce qu'un ou plusieurs objets accèdent à cette colonne
je suis en train de faire ceci:
ALTER TABLE CompanyTransactions DROP COLUMN Created
Mais j'obtiens ceci:
Msg 5074, Niveau 16, État 1, Ligne 2 L'objet "DF _ _ CompanyTr _ _ Creat _ _ 0CDAE408" dépend de la colonne "Created". Msg 4922, Niveau 16, État 9, Ligne 2 La colonne ALTER TABLE DROP créée a échoué parce qu'un ou plusieurs objets accèdent à cette colonne.
Ceci est une première table de code. D'une façon ou d'une autre, les migrations sont devenues complètement désordonnées et j'essaie de faire reculer manuellement certains modifié.
j'ai aucun idée de ce que c'est:
DF__CompanyTr__Creat__0CDAE408
2 réponses
Vous devez supprimer le constraints
de la colonne avant d'enlever la colonne. Le nom auquel vous faites référence est un default constraint
.
e.g.
alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408];
alter table CompanyTransactions drop column [Created];
la réponse de @SqlZim est correcte mais juste pour expliquer pourquoi cela s'est probablement produit. J'ai eu un problème similaire et cela a été causé par une chose très innocente: ajouter une valeur par défaut à une colonne
ALTER TABLE MySchema.MyTable ADD
MyColumn int DEFAULT NULL;
mais dans le domaine du serveur MS SQL une valeur par défaut sur un colum est une contrainte. Et comme toute contrainte, il a un identifiant. Et vous ne pouvez pas laisser tomber une colonne si elle est utilisée dans une contrainte.
Donc ce que vous pouvez réellement faire éviter ce genre de problèmes est toujours de donner vos contraintes par défaut nom explicite par exemple:
ALTER TABLE MySchema.MyTable ADD
MyColumn int NULL,
CONSTRAINT DF_MyTable_MyColumn DEFAULT NULL FOR MyColumn;
vous devrez quand même laisser tomber la contrainte avant de laisser tomber la colonne, mais vous au moins connaître son nom à l'avant.