我得到错误“DELETE语句与参考约束冲突”

我试图用外键截断一个表,并得到消息:

不能截断表,因为它被FOREIGN KEY约束引用 ”。

我读了很多有关这个问题的文献,并认为我通过使用deletefind了解决scheme

DELETE FROM table_name DBCC CHECKIDENT (table_name, RESEED, 0) 

但是我仍然收到错误信息:

DELETE语句与参考约束冲突 ”。

当我尝试使用Microsoft Management Studio删除并执行以前的查询时

 DELETE FROM table_name DBCC CHECKIDENT (table_name, RESEED, 0) 

它不会给出错误并正常工作。 我想删除表中的所有信息并添加新的信息,但是我不想删除并创build外键。

该错误意味着您在其他表中的数据引用了您要删除的数据。

您需要删除并重新创build约束或删除外键引用的数据。

假设你有下面的表格

 dbo.Students ( StudentId StudentName StudentTypeId ) dbo.StudentTypes ( StudentTypeId StudentType ) 

假设StudentTypeId中的StudentTypeId列和StudentsStudentTypeId列之间存在外键约束

如果您尝试删除StudentTypes的所有数据,则会发生错误,因为StudentTypeId中的StudentTypeId列会引用StudentTypes表中的数据。

编辑:

DELETETRUNCATE基本上做同样的事情。 唯一的区别是TRUNCATE不会将更改保存到日志文件中。 你也不能在TRUNCATE使用WHERE子句

至于为什么你可以在SSMS中运行,而不是通过你的应用程序。 我真的看不到这一切发生。 无论事务源自何处,FK约束仍将引发错误。

你有没有考虑在相关的地方应用ON DELETE CASCADE

您试图删除另一行(可能在另一个表中)引用的行。

您需要首先删除行(或者至less将其外键重新设置为别的东西),否则最终会引用一个引用不存在的行的行。 数据库禁止这一点。

要删除而不更改引用,您应该先删除或以其他方式更改(以适合您的目的的方式)其他表中的所有相关行。

要切断,您必须删除引用。 TRUNCATE是DDL语句(类似于CREATE和DROP)而不是DML语句(如INSERT和DELETE),不会导致触发器(无论是显式还是与引用和其他约束关联)触发。 因此,如果在带引用的表上允许使用TRUNCATE,则可能会将数据库置于不一致状态。 当TRUNCATE是某些系统所使用的标准的扩展时,这是一个规则,并且由该标准规定,现在已被添加。