代码之家  ›  专栏  ›  技术社区  ›  Simon A. Eugster

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

  •  24
  • Simon A. Eugster  · 技术社区  · 16 年前

    尝试删除列时获取的错误消息:

    对象“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.tlkprollekkontakt>columns>fkkeywordrollekontakt)(在mssql服务器管理器中),选择modify和deleting来生成删除列的脚本。然后,“表设计器”>“生成更改脚本”生成必要的命令:

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

    就是这样:

    5 回复  |  直到 9 年前
        1
  •  36
  •   Aaron Bertrand    16 年前

    你试过了吗:

    ALTER TABLE <tablename> DROP CONSTRAINT defEmptyString;
    

    ?

        2
  •  7
  •   Majid Basirati Sibi Elango    9 年前

    删除约束 它依赖于

    ALTER TABLE TableName DROP CONSTRAINT dependent_constraint
    

    然后删除列:

    ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME
    

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

    示例:尝试删除某些列 IsDeleted2

    误差

    对象“df_u employees_u isdel_u 15502E78”依赖于列 “已删除2”。

    由于一个或多个对象,alter table drop column isdeleted2失败 访问此列。

    错误清楚地表明我们需要删除 DF__Employees__IsDel__15502E78 约束

    ALTER TABLE Employess 
    DROP CONSTRAINT DF__Employees__IsDel__15502E78;
    

    液滴柱: ALTER TABLE Employess DROP COLUMN IsDelted2

        3
  •  3
  •   Majid Basirati Sibi Elango    9 年前

    我现在可以解决这个问题了。很抱歉,我没有复制完整的错误消息,它是:

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

    消息5074,级别16,状态1,行1
    客体 “fk_tlkprollekontakt_tlkpkyword”依赖于列 “fkkeywordrollekontakt”。
    msg 4922,级别16,状态9,第1行alter table drop column fkkeywordrollekontakt失败,原因是 更多对象访问此列。

    我可以通过右键单击列条目(dbo.tlkprollekkontakt>columns>fkkeywordrollekontakt)(在mssql服务器管理器中),选择modify和deleting来生成删除列的脚本。然后,“表设计器”>“生成更改脚本”生成必要的命令:

    ALTER TABLE dbo.tlkpRolleKontakt
        DROP CONSTRAINT FK_tlkpRolleKontakt_tlkpKeyword
    EXECUTE sp_unbindefault N'dbo.tlkpRolleKontakt.fkKeywordRolleKontakt'
    ALTER TABLE dbo.tlkpRolleKontakt
        DROP COLUMN fkKeywordRolleKontakt
    
        4
  •  2
  •   masoud ramezani    16 年前

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

    ALTER TABLE  @tablename  NOCHECK CONSTRAINT  @constraintname 
    
        5
  •  0
  •   Sandman    12 年前

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

    1. 删除该列的数据。
    2. 一旦列中没有值-

    ALTER TABLE <table_name> DROP COLUMN <column_name>

    这样柱子很容易掉下来。

    如果你在专栏里有大量的数据,这会让你头疼。

    推荐文章