我有一个SQL Server 2012 UPDATE触发器,当数据在数据库(Microsoft Project Server数据库)中的表中更新时发生:)
我使用以下语句从触发器
中的表中获取更新的元素SELECT @dataId = INSERTED.Id FROM INSERTED;
但问题是由于Microsoft Project Server的行为,即使只更改了一个任务(每个任务是数据库中的一个记录),它也会更新项目中的所有任务。
我知道我可以获取应该更新的项目的ID,但我不知道如何将更新的行与仍在UPDATE触发器内的数据库中的数据进行比较?
答案 0 :(得分:3)
要获取实际更改的行,请在触发器中使用此
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 ...
)