繁体   English   中英

如何在SQL Server 2008中删除具有对象依赖性的列?

[英]How do I drop a column with object dependencies in SQL Server 2008?

我在尝试删除列时获得的错误消息:

对象'defEmptyString'依赖于列'fkKeywordRolleKontakt'。

Msg 5074,Level 16,State 1,Line 43

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

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

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

fkKeywordRolleKontakt 2 814625945 0 defEmptyString

我无法删除fkKeywordRolleKontaktdefEmptyString

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

编辑:也许这也很重要。 列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服务器管理器中),选择修改并删除列来生成一个删除列的脚本。 然后,表设计器>生成更改脚本生成必要的命令:

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

而已 :)

你先试试了吗:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;

删除依赖于该列的约束

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint

然后Drop Column:

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

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

Msg 5074,Level 16,State 1,Line 1
对象'defEmptyString'依赖于列'fkKeywordRolleKontakt'。

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

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

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

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

ALTER TABLE  @tablename  NOCHECK CONSTRAINT  @constraintname 

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

  1. 删除该列的数据。
  2. 一旦列内部没有值,它就会 -

ALTER TABLE <table_name> DROP COLUMN <column_name>

这样,该列很容易掉落。

PS - 如果您在列中有大量数据,这是一个令人头疼的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM