ALTER TABLE DROP COLUMN失败,因为一个或多个对象访问此列

我想这样做:

ALTER TABLE CompanyTransactions DROP COLUMN Created 

但我明白了:

Msg 5074,Level 16,State 1,Line 2对象’DF__CompanyTr__Creat__0CDAE408’依赖于’Created’列。 消息4922,级别16,状态9,行2 ALTER TABLE DROP COLUMN创建失败,因为一个或多个对象访问此列。

这是代码第一表。 某种程度上,迁移已经变得混乱,我试图手动回滚一些变化。

知道这是什么:

 DF__CompanyTr__Creat__0CDAE408 

在删除列之前,必须从列中删除constraints 。 您引用的名称是default constraint

例如

 alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408]; alter table CompanyTransactions drop column [Created]; 

@ SqlZim的答案是正确的,但只是为了解释为什么会发生这种情况。 我有类似的问题,这是由非常无辜的事情引起的:为列添加默认值

 ALTER TABLE MySchema.MyTable ADD MyColumn int DEFAULT NULL; 

但在MS SQL Server领域,colum上的默认值是CONSTRAINT。 和每个约束一样,它有一个标识符。 如果在CONSTRAINT中使用它,则不能删除列。

所以你实际上可以做的就是避免这种问题总是给你的默认约束一个明确的名字 ,例如:

 ALTER TABLE MySchema.MyTable ADD MyColumn int NULL, CONSTRAINT DF_MyTable_MyColumn DEFAULT NULL FOR MyColumn; 

在删除列之前,您仍然必须删除约束,但您至少预先知道它的名称