Sql server 如何在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
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