220

我通过以下方式创建了一个外键(在 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列?

谢谢。

4

8 回答 8

337

尝试

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID
于 2008-09-18T14:54:18.310 回答
50

这将起作用:

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK]
于 2008-09-18T14:57:29.363 回答
26

我想这会对你有所帮助...

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)

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

于 2013-12-31T12:45:01.363 回答
21

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

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
于 2014-06-13T22:23:54.833 回答
11
alter table company drop constraint Company_CountryID_FK
于 2008-09-18T14:56:47.417 回答
4

我不知道 MSSQL 但它不会是:

alter table company drop **constraint** Company_CountryID_FK;
于 2008-09-18T14:56:00.723 回答
1

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

于 2010-06-01T17:37:46.770 回答
1

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

要删除约束:

alter table company drop constraint Company_CountryID_FK

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

于 2013-03-26T13:34:53.373 回答