0

DBに2つのテーブルがあります

Collection_ ( #Id_Collection, Libelle_Collection, Id_Editeur_Editeur )

編集者 ( #Id_Editeur, Libelle_Editeur )

テーブル「Editeur」からいくつかのレコードを削除したい場合、次のエラーが表示されます。

DELETE ステートメントは、REFERENCE 制約 "FK_Collection_Id_Editeur_Editeur" と競合しました。データベース「Gestion_bib」、テーブル「dbo.Collection_」、列「Id_Editeur_Editeur」で競合が発生しました。ステートメントは終了されました。

Collection_ テーブルの外部キーが Editeur テーブルの PK であるため、エラーが発生することはわかっています。別の DB で Cascade ステートメントを使用していましたが、問題があったため、別の DB を使用したくありません。 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 値に変更する他の方法はありますか??

4

1 に答える 1

0

SQLクエリを使用してこれを実行してみてください。

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

それで、

Delete From Editeur  Where Id_Editeur IN (CommaSeperatedValuesToDelete);
于 2012-10-03T10:05:37.120 に答える