0

データベースに 2 つのテーブルがあり、トリガーを使用してカスケードで削除したいと考えています。リレーションシップでカスケード削除を使用していましたが、この場合はより多くのテーブルがあり、SQL Server ではリレーションシップでカスケード削除を設定できません。これは循環が生じるためです。

そのため、リレーションシップでカスケード削除を設定できないテーブルのレジスタを削除するトリガーを作成したいと考えています。

私はこのトリガーを使用します:

CREATE TRIGGER trg_myTrigger
   ON  Componentes
   AFTER DELETE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here
    Delete from mytable2 where IDParentFromTable1 IN(select deleted.IDtable1 from deleted)
END
GO

ただし、外部キーのエラーが発生します。

なぜこのエラーが発生するのか本当にわかりません。

ありがとう。

4

1 に答える 1

2

トリガーは DELETE の後に起動するため、トリガーが実行される前に外部キー エラーが発生します。

次のいずれかを使用する必要があります

  • mytable2 を削除してから Componentes を削除するストアド プロシージャ
  • INSTEAD OF (トリガー前)
  • トランザクションでの 2 つの個別の削除
于 2013-05-15T09:27:07.727 に答える