29

尝试删除列时收到的错误消息:

对象“defEmptyString”依赖于列“fkKeywordRolleKontakt”。

消息 5074,第 16 层,状态 1,第 43 行

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

我已经尝试找到默认约束,如下所述: SQL Server 2005 drop column with constraints

不幸的是没有任何成功:(返回的行是:

fkKeywordRolleKontakt 2 814625945 0 defEmptyString

而且我无法删除fkKeywordRolleKontakt和中的任何一个defEmptyString

摆脱这种依赖的正确方法是什么?

编辑:也许这也很重要。fkKeywordRolleKontakt 列的类型为 udKeyword (nvarchar(50)),默认为dbo.defEmptyString.


编辑2:解决

我现在可以解决问题了。对不起,我没有复制完整的错误信息,它是:

Msg 5074, Level 16, State 1, Line 1
The object 'defEmptyString' is dependent on column 'fkKeywordRolleKontakt'.
Msg 5074, Level 16, State 1, Line 1
The object 'FK_tlkpRolleKontakt_tlkpKeyword' is dependent on column 'fkKeywordRolleKontakt'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN fkKeywordRolleKontakt failed because one or more objects access this column.

我可以通过右键单击列条目 (dbo.tlkpRolleKontakt > Columns > fkKeywordRolleKontakt)(在 MSSQL 服务器管理器中),选择修改并删除列来生成一个脚本来删除列。然后 Table Designer > Generate Change Script 生成了必要的命令:

ALTER TABLE dbo.tlkpRolleKontakt
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
    DROP COLUMN fkKeywordRolleKontakt

就是这样 :)

4

5 回答 5

40

您是否先尝试:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;

?

于 2010-02-12T17:45:31.480 回答
8

删除依赖于该列的约束

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint

然后删除列:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME

dependent_constraint:当我们尝试删除依赖列时,此约束会显示在错误中。

示例:尝试删除某些列IsDeleted2

错误

对象“DF__Employees__IsDel__15502E78”依赖于列“IsDeleted2”。

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

错误明确指出我们需要删除DF__Employees__IsDel__15502E78约束

ALTER TABLE Employess 
DROP CONSTRAINT DF__Employees__IsDel__15502E78;

删除列: ALTER TABLE Employess DROP COLUMN IsDelted2

于 2015-10-07T16:19:37.507 回答
5

我现在可以解决问题了。对不起,我没有复制完整的错误信息,它是:

消息 5074,级别 16,状态 1,第 1 行
对象“defEmptyString”依赖于列“fkKeywordRolleKontakt”。

消息 5074,级别 16,状态 1,第 1 行
对象“FK_tlkpRolleKontakt_tlkpKeyword”依赖于列“fkKeywordRolleKontakt”。
消息 4922,级别 16,状态 9,第 1 行 ALTER TABLE DROP COLUMN fkKeywordRolleKontakt 失败,因为一个或多个对象访问此列。

我可以通过右键单击列条目 (dbo.tlkpRolleKontakt > Columns > fkKeywordRolleKontakt)(在 MSSQL 服务器管理器中),选择修改并删除列来生成一个脚本来删除列。然后 Table Designer > Generate Change Script 生成了必要的命令:

ALTER TABLE dbo.tlkpRolleKontakt
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
    DROP COLUMN fkKeywordRolleKontakt
于 2016-06-09T10:35:14.640 回答
2

使用此脚本取消约束检查:

ALTER TABLE  @tablename  NOCHECK CONSTRAINT  @constraintname 
于 2010-02-13T12:54:20.997 回答
-1

我遇到了一个更简单的解决方案。

  1. 删除该列的数据。
  2. 一旦该列内部没有任何值,请执行 -

ALTER TABLE <table_name> DROP COLUMN <column_name>

这样一来,该列很容易被丢弃。

PS - 如果您在列中有大量数据,这会让人头疼。

于 2014-03-25T11:33:17.380 回答