我有一个表中有一个很好的列(也许大约100)和相当多的更新(对于“很多”的一些定义)的触发器。 如果某些字段中的任何一个已更改,触发器会在另一个表中插入一些数据。什么比较方法比较好?
由于显而易见的原因,我希望此触发器尽可能快地运行。比较最好的方法是什么? 现在我有那些:
IF NOT EXISTS (SELECT * FROM Inserted i, Deleted d WHERE
i.Fld1 = d.Fld1 AND i.Fld2 = d.Fld2 AND
i.Fld3 = d.Fld3 AND i.Fld4 = d.Fld4 AND
i.Fld5 = d.Fld5 AND i.Fld6 = d.Fld6 AND
i.Fld7 = d.Fld7)
THEN ...
IF ((SELECT Fld1 FROM Inserted) <> (SELECT Fld1 FROM Deleted) OR
(SELECT Fld2 FROM Inserted) <> (SELECT Fld2 FROM Deleted) OR
(SELECT Fld3 FROM Inserted) <> (SELECT Fld3 FROM Deleted) OR
(SELECT Fld4 FROM Inserted) <> (SELECT Fld4 FROM Deleted) OR
(SELECT Fld5 FROM Inserted) <> (SELECT Fld5 FROM Deleted) OR
(SELECT Fld6 FROM Inserted) <> (SELECT Fld6 FROM Deleted) OR
(SELECT Fld7 FROM Inserted) <> (SELECT Fld7 FROM Deleted))
THEN...
我通常喜欢第一种方法,因为它是更紧凑,似乎更地道。但是,速度问题时,我该怎么做?
Gotcha!非常感谢,非常感谢...... – raven 2010-10-01 10:28:10
只有当您没有空值或者您设置了ANSI_NULLS OFF时,这才会起作用 - 否则,涉及null的比较会产生'UNKNOWN',而不是True或False。 – 2010-10-04 15:35:29
@大卫 - 呃,在这个问题中没有提到任何列是否可以为空,所以我没有在我的回答中解决这个问题。如果所有列都是不可空的,它将正常工作。 – 2010-10-04 15:48:27