É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
23
demandé sur Casey Crookston 2017-04-21 21:11:28

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];
45
répondu SqlZim 2017-04-21 18:14:26

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.

5
répondu malloc4k 2018-01-30 19:13:59