如何在SQL Server中删除外键?


201

我通过以下方式创建了外键(在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'。
Msg 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色谱柱?

谢谢。


2
您尝试删除外键会遇到什么错误?
ddc0660

2
只是要知道,在不知道为什么存在外键约束的情况下删除外键约束是很危险的。如果您只是创建了此文件,并且错误地执行了此操作,请使用其他答案中提供的代码。如果不是,那么在确定不会破坏其他内容之前,不要放弃该约束。创建约束以强制执行业务规则,最好在删除它们之前确定不再需要它们。
HLGEM


您删除FK的语法不需要单词“ foreign key”。这是MySQL的语法,而不是SQL Server的语法。您可以将其替换为“约束”一词。
John Gilmer

Answers:


313

尝试

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID

48

这将起作用:

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

23

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

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)

它将基于特定的表和列删除外键约束。


2
谢谢萨米尔。概括性强。
kuklei

19

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

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

11
alter table company drop constraint Company_CountryID_FK

4

我不知道MSSQL,但不是:

alter table company drop **constraint** Company_CountryID_FK;

1

您也可以右键单击表,选择“修改”,然后转到属性,右键单击该属性,然后选择“删除主键”。


1

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

删除约束:

alter table company drop constraint Company_CountryID_FK

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.