如何知道是否在表上进行了更新/插入/删除

时间:2011-12-13 17:11:08

标签: sql-server-2008

我有一个名为Table A的表,我创建了一个处理INSERTS,UPDATES,DELETES的触发器。现在,为了处理我的后续步骤,我想知道发生了什么DML操作。我如何知道是否发生了更新/插入/删除。

您的想法,反馈非常感谢!

1 个答案:

答案 0 :(得分:2)

在触发器内部,您可以使用两个特殊的桌子:INSERTEDDELETED。如果只在INSERTED表中存在一行,则发生INSERT操作。同样,如果只在DELETED表中存在一行,则会发生DELETE操作。如果两个表中都存在该行,则发生UPDATE,INSERTED表保存新值,而DELETED表保存旧值。

INSERTed Rows:

SELECT i.*
    FROM INSERTED i
        LEFT JOIN DELETED d
            ON i.PrimaryKey = d.PrimaryKey
    WHERE d.PrimaryKey IS NULL

DELETEd Rows:

SELECT d.*
    FROM DELETED d
        LEFT JOIN INSERTED i
            ON d.PrimaryKey = i.PrimaryKey
    WHERE i.PrimaryKey IS NULL

UPDATEd Rows:

SELECT *
    FROM INSERTED i
        INNER JOIN DELETED d
            ON i.PrimaryKey = d.PrimaryKey