You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL触发器中判断数据行是被更新还是删除?

问题描述

我编写了如下创建SQL触发器的代码:

CREATE TRIGGER TRIGGERNAME ON [TABLENAME]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
     --[SQL STATEMENTS]
END

现需在该触发器的SQL语句中实现如下逻辑:

if (a row is updated) {
    -- do something
} 
else if (a row is deleted) {
    -- do something else
}

请问该如何实现此判断逻辑?

解决方案

在SQL Server的触发器中,可借助INSERTED和DELETED两个虚拟表判断操作类型:

  • INSERTED表:仅在INSERT或UPDATE操作时存在,存储插入/更新后的行数据
  • DELETED表:仅在DELETE或UPDATE操作时存在,存储删除/更新前的行数据

基于这两个表的存在性,就能实现目标判断逻辑,修改后的触发器代码如下:

CREATE TRIGGER TRIGGERNAME ON [TABLENAME]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
    -- 判断UPDATE操作:UPDATE时两个虚拟表均有数据
    IF EXISTS(SELECT 1 FROM INSERTED) AND EXISTS(SELECT 1 FROM DELETED)
    BEGIN
        -- 此处编写UPDATE对应的处理逻辑
        PRINT '执行UPDATE操作的处理逻辑';
    END
    -- 判断DELETE操作:DELETE时仅DELETED表有数据
    ELSE IF EXISTS(SELECT 1 FROM DELETED)
    BEGIN
        -- 此处编写DELETE对应的处理逻辑
        PRINT '执行DELETE操作的处理逻辑';
    END
END

补充说明:

  • 若需处理INSERT操作,可新增ELSE IF EXISTS(SELECT 1 FROM INSERTED)分支
  • 使用EXISTS(SELECT 1 FROM ...)是高效的判断方式,无需返回实际数据,仅需确认表中是否存在行即可

内容的提问来源于stack exchange,提问作者Ana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:31:04