回答
尝试以下
ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <FOREIGN_KEY_NAME>
我没有添加任何约束名称。我如何删除该约束? –
即使您没有指定约束名称,SQL Server也会分配一个唯一的约束名称。您可以使用SQL Management Studio查找名称。 –
您还可以在postgres命令行客户端中输入\ d table_name来查找约束的名称。通常看起来像“fk .......” – Nytux
这样做是错误的,请参考referential integrity,因为一旦破坏不再需要通过记录并删除破坏约束条件的记录,就不会再打开它。
反正语法如下:
ALTER TABLE Tablename DROP CONSTRAINT ContName;
请参阅MSDN:
不,SQL Server中用于删除外键和主键的语法是相同的:alter table
ALTER TABLE table
DROP FOREIGN KEY fk_key
编辑:没有注意到你USI NG SQL服务器,我的坏
ALTER TABLE table
DROP CONSTRAINT fk_key
我正在使用SQL Server。 –
所以我注意到了:) – mokuril
ALTER TABLE [TableName] DROP CONSTRAINT [CONSTRAINT_NAME]
但是,要小心的人,一旦你这样做,你可能没有机会回来,你应该读一些基本的数据库本书中看到为什么我们需要外键
只要参照完整性仍然存在,他可以再次添加约束条件,如果他想要回来的话。如果不是,那就必须修正。 – Tobberoth
@Tobberoth,是的,我的意思是,谢谢你说清楚。在现实世界中,大部分时间,其他开发人员会混淆表中的数据,并且由于那些数据,您无法将约束添加回来。 –
要删除所有从DB约束:
SELECT 'ALTER TABLE ' + Table_Name +' DROP CONSTRAINT ' + Constraint_Name
FROM Information_Schema.CONSTRAINT_TABLE_USAGE
使用这些查询找到所有FKS:
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
你应该考虑(临时)禁用约束之前,你完全删除它。
如果你看一下表创建TSQL,你会看到类似这样的:
ALTER TABLE [dbo].[dbAccounting] CHECK CONSTRAINT [FK_some_FK_constraint]
您可以运行
ALTER TABLE [dbo].[dbAccounting] NOCHECK CONSTRAINT [FK_some_FK_constraint]
...然后插入/更新一堆中违反约束值,然后通过运行原始CHECK
声明将其重新打开。
(我不得不这样做是为了清理设计不当的系统我继承了过去。)
alter table <referenced_table_name> drop primary key;
外键约束将被删除。
删除引用表的主键可能是尝试解决问题的最糟糕方式。等待 - 删除引用的表本身可能会更糟糕。 – brewmanz
或者,您也可以从SQL Server Management Studio本身中删除外键约束。 如果命令不起作用,您可以尝试使用。
- 展开您的数据库视图。
- 右键单击具有外键约束的表。选择设计。包含关于表格列信息的选项卡将打开。
- 右键单击具有外键引用的列。或者你可以右键点击任何列。选择关系。
- 在弹出窗口中会出现一个关系列表(如果有的话)。
- 从那里你可以删除外键约束。
我希望帮助
根据DB您使用有一个语法或其他。
如果您使用甲骨文你必须把什么其他用户告诉你:
ALTER TABLE table_name DROP CONSTRAINT fk_name;
但是如果你使用MySQL的然后这会给你一个语法错误,而不是你可以键入:
ALTER TABLE table_name DROP INDEX fk_name;
删除表的所有外键:
USE [Database_Name]
DECLARE @FOREIGN_KEY_NAME VARCHAR(100)
DECLARE FOREIGN_KEY_CURSOR CURSOR FOR
SELECT name FOREIGN_KEY_NAME FROM sys.foreign_keys WHERE parent_object_id = (SELECT object_id FROM sys.objects WHERE name = 'Table_Name' AND TYPE = 'U')
OPEN FOREIGN_KEY_CURSOR
----------------------------------------------------------
FETCH NEXT FROM FOREIGN_KEY_CURSOR INTO @FOREIGN_KEY_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @DROP_COMMAND NVARCHAR(150) = 'ALTER TABLE Table_Name DROP CONSTRAINT' + ' ' + @FOREIGN_KEY_NAME
EXECUTE Sp_executesql @DROP_COMMAND
FETCH NEXT FROM FOREIGN_KEY_CURSOR INTO @FOREIGN_KEY_NAME
END
-----------------------------------------------------------------------------------------------------------------
CLOSE FOREIGN_KEY_CURSOR
DEALLOCATE FOREIGN_KEY_CURSOR
- 1. SQL和外键约束删除
- 2. SQL Server中的外键约束
- 3. 如何在Sql Server 2000的表中删除所有外键约束?
- 4. 如何在SQL Server中存在外键约束的情况下删除表?
- 5. SQL Server 2005,强制实施外键约束和级联删除
- 6. 对外键的SQL Server约束
- 7. SQL Server有条件的外键约束
- 8. 如何在SQL Server中删除外键?
- 9. SQL Server 2008中无法删除约束
- 10. 外键约束SQL
- 11. 删除复制表的外键约束
- 12. 无法删除SQL Server中的主键约束
- 13. SQL Server外键约束好处
- 14. SQL Server 2008外键约束错误
- 15. 外键约束
- 16. MySQL外键约束,级联删除
- 17. 删除Mysql表列与外键约束
- 18. 无法删除外键约束
- 19. mysql删除和外键约束
- 20. 自引用外键约束和删除
- 21. SQL删除更新外键主键约束
- 22. 无法删除约束 - SQL Server 2008 R2
- 23. SQL Server约束不会删除
- 24. 如何删除所有表中的所有外键约束?
- 25. 如何仅在sql server中存在外键约束?
- 26. 在Entity Framework中,如何使用外键约束删除记录?
- 27. 如何在SQLAlchemy中删除外键约束?
- 28. 删除SQL Server中的外键和列
- 29. 如何从sql server management studio中删除约束?
- 30. mysql外键约束
如果您是数据库新手,遇到外键冲突时首先应该考虑“我会放弃外键”。 –
可能的重复[如何在SQL Server中删除外键?](http://stackoverflow.com/questions/93264/how-do-i-drop-a-foreign-key-in-sql-server) – Liam