检查触发器是否被 INSERT 或 DELETE 触发

Dev*_*ion 1 trigger sql-server insert t-sql sql-server-2008-r2

我知道这是您可以在本网站上找到的最简单的问题,但我无法在互联网上找到答案。

如何检查触发器是否由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
Run Code Online (Sandbox Code Playgroud)

如果是insert,我想做一些工作,如果是delete ,我想做一些其他工作。

请提供相同的代码片段。

Aar*_*and 10

只要触发器仅用于插入/删除:

IF EXISTS (SELECT 1 FROM inserted)
   -- I am an insert
ELSE
   -- I am a delete
Run Code Online (Sandbox Code Playgroud)

事实上,如果您基于对插入/删除的连接来做事,它甚至可以更简单:

-- 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;
Run Code Online (Sandbox Code Playgroud)

如果将更新操作添加到触发器中,逻辑会变得更加复杂,当然:

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
Run Code Online (Sandbox Code Playgroud)