web-dev-qa-db-ja.com

トリガーがINSERTまたはDELETEによって起動されたかどうかを確認します

これがあなたがこのウェブサイトで見つけることができる最も簡単な質問であることを知っていますが、インターネットでその答えを見つけることができませんでした。

トリガーがINSERTまたはDELETEによってトリガーされたかどうかを確認する方法

CREATE TRIGGER [dbo].[TestTrigger]
On [dbo].[Table1]
AFTER INSERT, DELETE
AS
    --if save
    --do some work

    --else if delete
    --do some work other work

挿入の場合は一部の作業を行い、-削除の場合はその他の作業を行います。

同じのコードスニペットを提供してください。

1

トリガーが挿入/削除のみの場合:

IF EXISTS (SELECT 1 FROM inserted)
   -- I am an insert
ELSE
   -- I am a delete

実際、挿入/削除への結合に基づいて処理を行っている場合は、さらに簡単になります。

-- do something for an insert
-- this will only actually do anything when it's an insert
INSERT dbo.somewhereElse SELECT whatever, 'insert'
  FROM dbo.sourceTable AS s
  INNER JOIN inserted AS i ON s.id = i.id;

-- do something for a delete
-- this will only actually do anything when it's a delete
INSERT dbo.somewhereElse SELECT whatever, 'delete'
  FROM dbo.sourceTable AS s
  INNER JOIN deleted AS d ON s.id = d.id;

トリガーに更新アクションを追加すると、当然、ロジックがより複雑になります。

IF EXISTS (SELECT 1 FROM inserted)
BEGIN
  IF EXISTS (SELECT 1 FROM deleted)
  BEGIN
    -- I am an update
  END
  ELSE
  BEGIN
    -- I am an insert
  END
END
ELSE
BEGIN
  -- I am a delete
END
9
Aaron Bertrand

私のコメントは未回答になったので、回答に変換しました。

挿入の場合は一部の作業を行い、-削除の場合はその他の作業を行います。

挿入用と削除用の別​​々のトリガーを作成できます。

CREATE TRIGGER dbo.Table1_AI
ON dbo.Table1
AFTER INSERT
AS
... insert-specific actions
CREATE TRIGGER dbo.Table1_AD
ON dbo.Table1
AFTER DELETE
AS
... delete-specific actions
3
Paul White 9