0

LINQ-to-SQL で使用する SQL Server データベースで自分自身を参照するテーブルがあります。

行の削除を処理するために、このテーブルにトリガーを作成しました。

ALTER TRIGGER [dbo].[TrgDeleteCalculation]
ON [dbo].[Calculation]
INSTEAD OF DELETE
AS 
BEGIN
    DELETE FROM Calculation WHERE CalcParentId IN (SELECT CalculationId FROM deleted)
    DELETE FROM Calculation WHERE CalculationId IN (SELECT CalculationId FROM deleted)
END

この問題は、DataModel で削除を実行しようとすると発生します。

これを行うと、次の例外が発生します: DELETE ステートメントが SAME TABLE REFERENCE 制約 "FK_calculations_calculations" と競合しました。データベース「DesignDb」、テーブル「dbo.Calculation」、列「CalcParentId」で競合が発生しました。ステートメントは終了されました。

トリガーがトリガーされていないと思います...

これは事実ですか、それとも他の何かでしょうか?

4

1 に答える 1

0

最初の削除クエリで削除している子レコードの 1 つが、別の子行の親行のようです。

この投稿をチェックしてください:

自己参照外部キー制約と削除

于 2012-04-25T21:06:14.630 に答える