親を削除するときに、テーブルの子を削除する必要があります。一般的な注文/詳細の例。
トリガーの代わりにこれを使用します:
CREATE TRIGGER trg_OderDelete
ON Oders
INSTEAD OF 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 Details where IDOrder IN(select deleted.IDOrder from deleted)
Delete from Orders where IDOrder IN(select deleted.IDOrder from deleted)
END
GO
最初に、最初の削除ステートメントのみを使用してみますが、注文ではなく詳細のみを削除するため、注文も削除するために 2 番目の削除を追加しました。
私の疑問は、これが正しいかどうかです。注文を削除するときにトリガーが実行される場合、トリガーを実行する注文を削除するためにトリガーに delete ステートメントを追加する必要があるのはなぜですか?
私もこれを知りたいです:
1.- トランザクションですか? 詳細を削除して、何らかの理由で注文を削除できない場合、最終的に詳細が削除されないということですか?
2.- この取引は、注文者を削除したときに新しい詳細が追加されないようにしますか? 注文を削除したいとします。トリガーで最初の削除、詳細が実行されますが、2 番目の削除、注文が実行される前に、他のユーザーが新しい詳細を追加しようとします。注文がトランザクションでブロックされているため、この詳細が追加されますか?
ありがとう。