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

Sim*_*ter 26 sql sql-server dependencies sql-server-2008 sql-drop

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

对象'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
Run Code Online (Sandbox Code Playgroud)

我无法删除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
Run Code Online (Sandbox Code Playgroud)

而已 :)

Aar*_*and 36

你先试试了吗:

ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;
Run Code Online (Sandbox Code Playgroud)

  • 是的,我做到了.然后我收到一条消息,说defEmptyString不是这个表的约束. (3认同)

Jin*_*alu 7

删除依赖于该列的约束

ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
Run Code Online (Sandbox Code Playgroud)

然后Drop Column:

ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

删除列: ALTER TABLE Employess DROP COLUMN IsDelted2


Sim*_*ter 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 Server Manager 中),选择修改并删除该列。然后表设计器 > 生成更改脚本生成了必要的命令:

ALTER TABLE dbo.tlkpRolleKontakt
    DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
ALTER TABLE dbo.tlkpRolleKontakt
    DROP COLUMN fkKeywordRolleKontakt
Run Code Online (Sandbox Code Playgroud)