SQL TRIGGER 检测 UPDATED 或 DELETED

问题描述 投票:0回答:4

这是我创建触发器的代码

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 sql-server triggers
4个回答
0
投票
CREATE TRIGGER [TRIGGERNAME] ON [TABLENAME]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
    DECLARE @DELETED INT, @UPDATED INT
    SELECT @DELETED = COUNT(*) FROM [deleted]
    SELECT @UPDATED = COUNT(*) FROM [inserted]
    IF @UPDATED > 0
            PRINT ' inserted  '
        END
    ELSE IF @DELETED > 0
        BEGIN
            PRINT ' deleted '
        END
END

0
投票

其实触发器只是用于插入/删除:

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

但是如果您想创建更新和删除操作的触发器,您可以尝试以下操作:

CREATE TRIGGER [TRIGGERNAME] ON [TABLENAME]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
    IF EXISTS (SELECT 1 FROM inserted)
    BEGIN
      IF EXISTS (SELECT 1 FROM deleted)
      BEGIN
        PRINT 'I am an update'
      END
    END
    ELSE
    BEGIN
      PRINT 'I am a delete'
    END
END

您可以查看此参考资料来为您提供更多帮助。


0
投票

inserted
伪表包含插入表中的记录
deleted
伪表包含从表中删除的记录

请记住,伪表将包含架构的副本,字段中是否有值将取决于表对该列的“允许空”设置。

Update
操作包含两个表(
inserted
deleted
)中的记录;
inserted
表包含新值,
deleted
表包含旧值。

“插入”操作将加载

inserted
以及正在插入的数据; “已删除”表实际上是空的。 此操作的“已删除”表还有更多内容,但我根据 OP 的条款对其进行了简化。

“删除”操作将加载“已删除”,其中的数据正在被移除/删除; “插入”表实际上是空的。 此操作的“插入”表还有更多内容,但我根据 OP 的条款对其进行了简化。

了解触发器的“FOR”和“AFTER”之间的区别,因为它们会使情况进一步“复杂化”;更多的是执行顺序和数据何时可用的预期。

基于上述知识,简化的更新触发查询将是:

            Update dbo.TABLE
            set field = value
                where id in (select id from inserted)
                    AND id in (select id from deleted)  
  • 注意
    AND
    连接运算符,要求
    [id]
    值包含在
    inserted
    deleted
    内以捕获
    Update
    操作。

-1
投票

在oracle中你可以这样写

在 [表名称] 上创建触发器 [触发器名称] 插入、更新、删除后 作为 开始

IF INSERTING    THEN
-- Some business logic

END IF;

IF UPDATING    THEN
-- Some business logic
END IF;

IF DELETING    THEN
-- Some business logic
END IF; 

结束

© www.soinside.com 2019 - 2024. All rights reserved.