DELETE语句与REFERENCE冲突

时间:2013-04-12 12:01:19

标签: asp.net sql sql-server sql-delete

我有一个table_Project,其中包含一个CustomerID(链接到tbl_Customer)。在tbl_Customer中,我有Customer_ID(作为密钥)和其他一些信息,如电话,电子邮件等。

要从Gridview中删除它,我使用此DeleteCommand:

DeleteCommand="DELETE FROM [tbl_Customer] WHERE [Customer_ID] = @Customer_ID" 

但它给了我以下错误:

The DELETE statement conflicted with the REFERENCE constraint "Klant_Relatie". The conflict occurred in database "Database_1", table "dbo.tbl_Project", column 'CustomerID'. The statement has been terminated.

但是通过更新CustomerInfo,我没有收到任何错误。我已经看到了C#的不同解决方案,但我使用.net

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

如果项目引用了客户端,则无法删除客户端。这就是错误的含义..

我不明白你的

  

我见过C#的不同解决方案,但我使用.net

但是你有不同的解决方案:

  1. 更改链接到旧项目(您要删除的项目)的所有项目引用的客户端
  2. 掉落约束(不是很好的选择)
  3. 删除客户端之前删除项目(手动或使用级联删除)

答案 1 :(得分:4)

您的问题与参照完整性有关。您无法删除某个表中某些记录(tbl_Customer,例如)当前正在引用的记录( from table table_Project ) 。 UPDATEDELETE不同,除非您要更新密钥,在您的情况CustomerID中。 UPDATEDELETE删除记录时修改记录。

看看这个例子,

tbl_Customer table

CustomerID  CustomerName
1           Hello
2           World

table_Project表

CustomerID  ProjectName
1           Webscripting
1           Database Maintenance

您可以随时在表2的记录tbl_customer上执行任何操作,因为没有记录引用它。但是在记录1中,除非删除表table_Project中的两个记录,否则无法删除它。您可以修改列CustomerName,但如果仍在引用,则不会CustomerID

答案 2 :(得分:2)

您可以做的另一件事是在SQL服务器中更改外键链接,以便在删除它时级联。这将导致记录向下删除。因此,如果删除表a中的记录,表b中引用该记录的任何记录也将被删除。