如果记录确实已更改,如何签入UPDATE触发器

时间:2017-07-10 13:40:38

标签: sql-server tsql database-trigger

我有一个SQL Server 2012 UPDATE触发器,当数据在数据库(Microsoft Project Server数据库)中的表中更新时发生:)

我使用以下语句从触发器

中的表中获取更新的元素
SELECT @dataId = INSERTED.Id FROM INSERTED;

但问题是由于Microsoft Project Server的行为,即使只更改了一个任务(每个任务是数据库中的一个记录),它也会更新项目中的所有任务。

我知道我可以获取应该更新的项目的ID,但我不知道如何将更新的行与仍在UPDATE触发器内的数据库中的数据进行比较?

1 个答案:

答案 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 ...
     )

你已经NOT EXISTS..INTERSECT deals with NULLs