【问题标题】:How do I drop a foreign key in SQL Server?如何在 SQL Server 中删除外键?
【发布时间】:2008-09-18 14:50:36
【问题描述】:

我通过以下方式创建了一个外键(在 SQL Server 中):

alter table company add CountryID varchar(3);
alter table company add constraint Company_CountryID_FK foreign key(CountryID) 
references Country;

然后我运行这个查询:

alter table company drop column CountryID;

我得到这个错误:

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

我试过了,但它似乎不起作用:

alter table company drop foreign key Company_CountryID_FK; 
alter table company drop column CountryID;

我需要做什么才能删除CountryID 列?

谢谢。

【问题讨论】:

  • 尝试删除外键时遇到什么错误?
  • 请注意,在不知道为什么存在的情况下删除外键约束是很危险的。如果您刚刚创建并错误地执行了此操作,请使用其他答案中提供的代码。如果不是,那么不要放弃约束,直到你确定这样做不会破坏其他东西。创建约束是为了强制执行业务规则,最好在删除它们之前确定它们不再需要。
  • 删除 FK 的语法不需要“外键”字样。这是 MySQL 的语法,而不是 SQL Server。您可以将其替换为“约束”一词。

标签: sql-server tsql


【解决方案1】:

试试

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID

【讨论】:

  • 这也有效(至少在 SQL 2016 中):alter table company drop constraint Company_CountryID_FK, column CountryID
【解决方案2】:

这将起作用:

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK]

【讨论】:

    【解决方案3】:

    我认为这对你有帮助...

    DECLARE @ConstraintName nvarchar(200)
    SELECT 
        @ConstraintName = KCU.CONSTRAINT_NAME
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
        ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
        AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
        AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
    WHERE
        KCU.TABLE_NAME = 'TABLE_NAME' AND
        KCU.COLUMN_NAME = 'TABLE_COLUMN_NAME'
    IF @ConstraintName IS NOT NULL EXEC('alter table TABLE_NAME drop  CONSTRAINT ' + @ConstraintName)
    

    它会根据特定的表和列删除外键约束。

    【讨论】:

      【解决方案4】:

      首先检查约束是否存在,然后将其删除。

      if exists (select 1 from sys.objects where name = 'Company_CountryID_FK' and type='F')
      begin
      alter table company drop constraint  Company_CountryID_FK
      end
      

      【讨论】:

        【解决方案5】:
        alter table company drop constraint Company_CountryID_FK
        

        【讨论】:

          【解决方案6】:

          我不知道 MSSQL 但不会:

          alter table company drop **constraint** Company_CountryID_FK;
          

          【讨论】:

            【解决方案7】:

            你也可以右键点击表格,选择修改,然后进入属性,右键点击它,然后选择删除主键。

            【讨论】:

              【解决方案8】:

              您是要删除 FK 约束还是列本身?

              要删除约束:

              alter table company drop constraint Company_CountryID_FK
              

              在您删除约束之前,您将无法删除该列。

              【讨论】:

                猜你喜欢
                • 2011-02-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多