これがあなたがこのウェブサイトで見つけることができる最も簡単な質問であることを知っていますが、インターネットでその答えを見つけることができませんでした。
トリガーが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
挿入の場合は一部の作業を行い、-削除の場合はその他の作業を行います。
同じのコードスニペットを提供してください。
トリガーが挿入/削除のみの場合:
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
私のコメントは未回答になったので、回答に変換しました。
挿入の場合は一部の作業を行い、-削除の場合はその他の作業を行います。
挿入用と削除用の別々のトリガーを作成できます。
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