Sql server 如何在SQL Server中删除外键?

Sql server 如何在SQL Server中删除外键?,sql-server,tsql,Sql Server,Tsql,我通过以下方式创建了一个外键(在SQL Server中): 然后运行以下查询: alter table company drop column CountryID; 我得到了这个错误: Msg 5074,第16级,第4状态,第2行 对象“Company\u CountryID\u FK”依赖于列“CountryID”。 味精4922,第16级,第9状态,第2行 ALTER TABLE DROP COLUMN CountryID失败,因为一个或多个对象访问此列 我已经试过了,但似乎不起作用: a

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

然后运行以下查询:

alter table company drop column CountryID;
我得到了这个错误:

Msg 5074,第16级,第4状态,第2行
对象“Company\u CountryID\u 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

谢谢。

试试看

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID

我不知道MSSQL,但它不是:

alter table company drop **constraint** Company_CountryID_FK;
这将有助于:

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

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

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

要删除约束,请执行以下操作:

alter table company drop constraint Company_CountryID_FK

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

我认为这将有助于您

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)

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

首先检查约束是否存在,然后删除它

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

尝试删除外键时会出现什么错误?请注意,在不知道外键约束存在的原因的情况下删除外键约束是危险的。如果您只是创建了这个,并且错误地创建了它,那么请使用其他答案中提供的代码。如果没有,则不要删除约束,直到您确定这样做不会破坏其他内容。创建约束是为了强制执行业务规则,最好在删除它们之前确定它们不再需要。删除FK的语法不需要“外键”这个词。这是MySQL的语法,而不是SQL Server。你可以用“约束”这个词来代替它。谢谢萨米尔。很好的概括。这也很有效(至少在SQL 2016中):
alter table company drop constraint company\u CountryID\u FK,column CountryID
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)
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