插入更新触发器如何确定是否插入或更新

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我需要在表A上写一个INSERT,更新触发器,它将删除表B中的所有行,其一个列(例如Desc)具有类似于表A列(例如col1)中插入/更新的值的值。我将如何编写它,以便既可以处理更新,也可以插入案例。如何确定是否为更新或插入执行触发器。

提问于
用户回答回答于

如果是MS SQL Server,触发器有特殊的INSERTEDDELETED跟踪“前”和“后”数据的表。所以你可以用这样的方法IF EXISTS (SELECT * FROM DELETED)若要检测更新,请执行以下操作。你只有行DELETED在更新时,但始终有行在INSERTED

用户回答回答于
CREATE TRIGGER dbo.TableName_IUD
ON dbo.TableName
AFTER INSERT, UPDATE, DELETE
AS 
BEGIN
    SET NOCOUNT ON;

    --
    -- Check if this is an INSERT, UPDATE or DELETE Action.
    -- 
    DECLARE @action as char(1);

    SET @action = 'I'; -- Set Action to Insert by default.
    IF EXISTS(SELECT * FROM DELETED)
    BEGIN
        SET @action = 
            CASE
                WHEN EXISTS(SELECT * FROM INSERTED) THEN 'U' -- Set Action to Updated.
                ELSE 'D' -- Set Action to Deleted.       
            END
    END
    ELSE 
        IF NOT EXISTS(SELECT * FROM INSERTED) RETURN; -- Nothing updated or inserted.

    ...

    END

扫码关注云+社区