如何删除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本身删除外键约束。 如果命令不起作用,您可以尝试 。
- 展开你的数据库视图。
- 右键单击具有外键约束的表。 selectdevise。 包含关于表格列信息的选项卡将打开。
- 右键单击具有外键引用的列。 或者你可以右键点击任何一列。 select关系。
- 在popup窗口中会出现关系列表(如果有的话)。
- 从那里你可以删除外键约束。
我希望有帮助
根据你使用的数据库有一个语法或其他。
如果您使用的是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;
外键约束将被删除。