如何删除SQL Server中的外键约束?

我想从另一个表中删除外键,所以我可以插入我select的值。

我是新的数据库,所以请告诉我正确的SQL查询删除或删除外键值。

尝试以下

ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <FOREIGN_KEY_NAME> 

请参阅: http : //www.w3schools.com/sql/sql_foreignkey.asp

这是指参照完整性的错误 ,因为一旦打破了它不容易打开的logging,并删除了打破约束的logging。

无论如何,语法如下:

 ALTER TABLE Tablename DROP CONSTRAINT ContName; 

请参阅MSDN:

  • 删除主键
  • 删除外键关系

从DB中删除所有约束:

 SELECT 'ALTER TABLE ' + Table_Name +' DROP CONSTRAINT ' + Constraint_Name FROM Information_Schema.CONSTRAINT_TABLE_USAGE 
 ALTER TABLE [TableName] DROP CONSTRAINT [CONSTRAINT_NAME] 

但是,要小心人,一旦你这样做,你可能永远不会有机会回来,你应该阅读一些基本的数据库书,看看为什么我们需要外键

 ALTER TABLE table DROP FOREIGN KEY fk_key 

编辑:没有注意到你正在使用SQL服务器,我的坏

 ALTER TABLE table DROP CONSTRAINT fk_key 

使用这些查询来查找所有FK:

 Declare @SchemaName VarChar(200) = 'Schema Name' Declare @TableName VarChar(200) = 'Table name' -- Find FK in This table. SELECT 'IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''' + '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + FK.name + ']' + ''') AND parent_object_id = OBJECT_ID(N''' + '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + OBJECT_NAME(FK.parent_object_id) + ']' + ''')) ' + 'ALTER TABLE ' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '.[' + OBJECT_NAME(FK.parent_object_id) + '] DROP CONSTRAINT ' + FK.name , S.name , O.name, OBJECT_NAME(FK.parent_object_id) FROM sys.foreign_keys AS FK INNER JOIN Sys.objects As O ON (O.object_id = FK.parent_object_id ) INNER JOIN SYS.schemas AS S ON (O.schema_id = S.schema_id) WHERE O.name = @TableName And S.name = @SchemaName -- Find the FKs in the tables in which this table is used SELECT ' IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N''' + '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + FK.name + ']' + ''') AND parent_object_id = OBJECT_ID(N''' + '[' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '].[' + OBJECT_NAME(FK.parent_object_id) + ']' + ''')) ' + ' ALTER TABLE ' + OBJECT_SCHEMA_NAME(FK.parent_object_id) + '.[' + OBJECT_NAME(FK.parent_object_id) + '] DROP CONSTRAINT ' + FK.name , S.name , O.name, OBJECT_NAME(FK.parent_object_id) FROM sys.foreign_keys AS FK INNER JOIN Sys.objects As O ON (O.object_id = FK.referenced_object_id ) INNER JOIN SYS.schemas AS S ON (O.schema_id = S.schema_id) WHERE O.name = @TableName And S.name = @SchemaName 

在完全删除之前,您应该考虑(暂时)禁用约束。

如果你看看创buildTSQL的表,你会看到类似于:

 ALTER TABLE [dbo].[dbAccounting] CHECK CONSTRAINT [FK_some_FK_constraint] 

你可以跑

 ALTER TABLE [dbo].[dbAccounting] NOCHECK CONSTRAINT [FK_some_FK_constraint] 

…然后插入/更新一些违反约束的值,然后通过运行原始的CHECK语句将其重新打开。

(我必须这样做来清理我以前inheritance的devise不佳的系统。)

或者,您也可以从SQL Server Management Studio本身删除外键约束。 如果命令不起作用,您可以尝试

  1. 展开你的数据库视图。
  2. 右键单击具有外键约束的表。 selectdevise。 包含关于表格列信息的选项卡将打开。
  3. 右键单击具有外键引用的列。 或者你可以右键点击任何一列。 select关系。
  4. 在popup窗口中会出现关系列表(如果有的话)。
  5. 从那里你可以删除外键约束。

我希望有帮助

根据你使用的数据库有一个语法或其他。

如果您使用的是Oracle ,则必须将其他用户告诉您的内容:

 ALTER TABLE table_name DROP CONSTRAINT fk_name; 

但是,如果你使用MySQL,那么这会给你一个语法错误,你可以input:

 ALTER TABLE table_name DROP INDEX fk_name; 
 alter table <referenced_table_name> drop primary key; 

外键约束将被删除。