如果记录真的改变了,如何检查更新触发器
How to check in UPDATE Trigger if record has really changed
我有一个 SQL Server 2012 UPDATE 触发器,它在数据库(Microsoft Project Server 数据库)的 table 中更新数据时发生:)
我正在使用以下语句从触发器
中的 table 获取更新的元素
SELECT @dataId = INSERTED.Id FROM INSERTED;
但问题是由于 Microsoft Project Server 的行为造成的,即使只有一项任务发生更改,它也会更新项目中的所有任务(每个任务是数据库中的一条记录)。
我知道我可以获得应该更新的项目的 ID,但我不知道如何将更新的行与仍在更新触发器中的数据库中的数据进行比较?
要获取实际更改的行,然后在触发器中使用它
SELECT
*
FROM
INSERTED I
JOIN
DELETED D ON I.KeyCol = D.KeyCol
WHERE
NOT EXISTS (
SELECT I.Col1, I.Col2, I.Col3, I.Col4 ...
INTERSECT
SELECT D.Col1, D.Col2, D.Col3, D.Col4 ...
)
我有一个 SQL Server 2012 UPDATE 触发器,它在数据库(Microsoft Project Server 数据库)的 table 中更新数据时发生:)
我正在使用以下语句从触发器
中的 table 获取更新的元素SELECT @dataId = INSERTED.Id FROM INSERTED;
但问题是由于 Microsoft Project Server 的行为造成的,即使只有一项任务发生更改,它也会更新项目中的所有任务(每个任务是数据库中的一条记录)。
我知道我可以获得应该更新的项目的 ID,但我不知道如何将更新的行与仍在更新触发器中的数据库中的数据进行比较?
要获取实际更改的行,然后在触发器中使用它
SELECT
*
FROM
INSERTED I
JOIN
DELETED D ON I.KeyCol = D.KeyCol
WHERE
NOT EXISTS (
SELECT I.Col1, I.Col2, I.Col3, I.Col4 ...
INTERSECT
SELECT D.Col1, D.Col2, D.Col3, D.Col4 ...
)