删除外键引用,删除时仍会出错

时间:2014-05-13 15:34:04

标签: sql sql-server foreign-keys

我有一个调用sql脚本的Web应用程序,该脚本试图从table_1中删除一行。但是,table_2使用FK约束引用它,因此这给出了错误。我手动删除了table_2的引用行。 (我通过查询证实它已经消失了。)然后我运行了应用程序,我仍然得到同样的错误! (The DELETE statement conflicted with the REFERENCE constraint "table_2_fk". The conflict occurred in database "my_db", table "table_2", column 'table_1_pk'.

为什么?

表格信息

table_2包含列pk,name和table_1_pk。它有一个FK约束table_2_fk,可确保table_1_fk = table_1.pk

table_1有pk,一堆其他列,没有FK约束。

删除和查询的详细信息

假设table_1.pk = 1.我运行了语句

delete from table_2 where table_1_pk = 1

然后我查询了db:

select * from table_2 where table_1_pk = 1

返回0结果。

1 个答案:

答案 0 :(得分:0)

您应该更改代码,以便首先从表2中删除,然后从表1中删除。或者可选地将Cascade删除添加到外键约束(在表1中删除时自动从表2中删除)< / p>

ADD CONSTRAINT [FK_Table2_table1] FOREIGN KEY([table_1_pk]) 
REFERENCES [dbo].[table1] ([table_1_fk ])
ON DELETE CASCADE