如果删除了包含PK的表,请将FK更改为Null Value

时间:2012-10-03 09:57:48

标签: c# sql-server ado.net

我的数据库中有两个表

  

Collection_(#Id_Collection,Libelle_Collection,Id_Editeur_Editeur)

     

Editeur(#Id_Editeur,Libelle_Editeur)

当我想从“Editeur”表中删除一些记录时,它给了我这个错误:

  

DELETE语句与REFERENCE约束冲突   “FK_Collection_Id_Editeur_Editeur”。冲突发生在数据库中   “Gestion_bib”,表“dbo.Collection_”,列“Id_Editeur_Editeur”。   声明已经终止。

我知道错误,因为Collection_表中的外键是Editeur表中的PK,我在另一个数据库中使用了Cascade语句,但我遇到了问题,所以我不喜欢使用它我使用另一种方法使用ADO.Net:

for (int i = 0; i < myClass.ds.Tables["Collection_"].Rows.Count; i++)
                        if (valToDelete == myClass.ds.Tables["Collection_"].Rows[i][2].ToString())
                            myClass.ds.Tables["Collection_"].Rows[i][2] = DBNull.Value;
                    SqlCommandBuilder cmb = new SqlCommandBuilder(adapter);
                    adapter.Update(myClass.ds, "Editeur");

但是当我处理包含许多FK的表时,这种方法变得复杂。

那么,如果我删除了包含PK的表,那么还有其他任何方法可以将FK更改为Null值吗?

1 个答案:

答案 0 :(得分:0)

尝试使用SQL Query执行此操作:

Update Collection_ SET  Id_Editeur_Editeur = NULL WHERE  Id_Editeur_Editeur IN 
(CommaSeperatedValuesToDelete);

然后,

Delete From Editeur  Where Id_Editeur IN (CommaSeperatedValuesToDelete);