Sql server 2008 如何知道是否对表进行了更新/插入/删除
我创建了一个名为表A的表,并创建了一个触发器来处理插入、更新和删除。现在为了处理我的下一步,我想知道DML采取了什么行动。如何知道是否已进行更新/插入/删除Sql server 2008 如何知道是否对表进行了更新/插入/删除,sql-server-2008,Sql Server 2008,我创建了一个名为表A的表,并创建了一个触发器来处理插入、更新和删除。现在为了处理我的下一步,我想知道DML采取了什么行动。如何知道是否已进行更新/插入/删除 非常感谢您的想法、反馈 在触发器内部,您可以使用两个特殊的表:INSERTED和DELETED。如果一行仅存在于插入的表中,则发生插入操作。同样,如果一行仅存在于DELETED表中,则会发生删除操作。如果两个表中都存在该行,则会发生更新,并且插入的表会保存新值,而删除的表会保存旧值 插入的行: SELECT i.* FROM INS
非常感谢您的想法、反馈 在触发器内部,您可以使用两个特殊的表:
INSERTED
和DELETED
。如果一行仅存在于插入的表中,则发生插入操作。同样,如果一行仅存在于DELETED
表中,则会发生删除操作。如果两个表中都存在该行,则会发生更新,并且插入的表会保存新值,而删除的表会保存旧值
插入的行:
SELECT i.*
FROM INSERTED i
LEFT JOIN DELETED d
ON i.PrimaryKey = d.PrimaryKey
WHERE d.PrimaryKey IS NULL
已删除的行:
SELECT d.*
FROM DELETED d
LEFT JOIN INSERTED i
ON d.PrimaryKey = i.PrimaryKey
WHERE i.PrimaryKey IS NULL
更新的行:
SELECT *
FROM INSERTED i
INNER JOIN DELETED d
ON i.PrimaryKey = d.PrimaryKey
或者为每个事件创建一个触发器,这是一个可能的解决方案。我想知道是否有一个地方可以让我们同时做这件事。最佳做法是什么?谢谢乔的回答。但当我试图编译触发器时,我得到一条错误消息,无效列PrimaryKey@SaiBand:PrimaryKey
在我的示例中是一个虚构的列名。您需要替换表中实际主键列的名称。谢谢!在将主键替换为表中的实际主键后,该操作将起作用。干杯