SQL删除查询外键约束

时间:2015-08-02 10:11:41

标签: sql asp.net sql-server aspxgridview

我正在尝试Delete使用主键作为外键在两个表中进行记录。每当我尝试运行查询时,它都会给我这个错误:

查询:

DELETE FROM BusinessPlus_Post
FROM BusinessPlus_Post 
INNER JOIN BusinessPlus_PostImage ON BusinessPlus_Post.Post_ID = BusinessPlus_PostImage.BusinessPlusPost_ID 
INNER JOIN BusinessPlus_PostTag ON BusinessPlus_Post.Post_ID = BusinessPlus_PostTag.BusinessPlusPost_ID
WHERE 
    (BusinessPlus_Post.Post_ID = 3) 
    AND (BusinessPlus_PostImage.BusinessPlusPost_ID = 3) 
    AND (BusinessPlus_PostTag.BusinessPlusPost_ID = 3)

错误:

  

DELETE语句与REFERENCE约束冲突   “FK_BusinessPlusPostImage”。数据库中发生冲突   “BusinessPlus_AdminPanel_Database”,表格   “dbo.BusinessPlus_PostImage”,列'BusinessPlusPost_ID'。该   声明已经终止。

2 个答案:

答案 0 :(得分:1)

目前,您只是声明要删除BusinessPlus_Post记录,而不是BusinessPlus_PostImageBusinessPlus_PostTag记录。这会导致问题,因为我们会有“孤儿”这样的问题。 PostImage和PostTag记录没有相应的帖子记录。

显然,无法从SQL Server中的多个表中删除(例如,MySQL中 支持)。

您必须拆分查询,然后从“孩子”中删除'表格首先:

DELETE FROM BusinessPlus_PostImage
  WHERE BusinessPlusPost_ID = 3

DELETE FROM BusinessPlus_PostTag
  WHERE BusinessPlusPost_ID = 3

DELETE FROM BusinessPlus_Post
  WHERE Post_ID = 3

答案 1 :(得分:0)

  

错误:DELETE语句与REFERENCE约束冲突   " FK_BusinessPlusPostImage&#34 ;.数据库中发生冲突   " BusinessPlus_AdminPanel_Database",表   " dbo.BusinessPlus_PostImage",列' BusinessPlusPost_ID'。该   声明已经终止。

错误表示您有引用外来数据的数据,因此您无法删除。

删除BusinessPlus_AdminPanel_Database表中的数据 dbo.BusinessPlus_PostImage,列BusinessPlusPost_ID,然后尝试删除