SQL Server中“AFTER INSERT,UPDATE”触发器的行为

时间:2010-11-28 07:39:42

标签: sql-server triggers

在SQL Server 2008中,我有一个场景,我在插入/更新时有一个包含复杂验证的表。这包括需要将XML输入临时转换为表格,以便根据永久表格验证其数据。

但是,我还有一个场景,我经常会更新不需要验证的简单整数列。从我所读的here开始,当我执行更新时,似乎SQL Server将返回临时内存中“插入”表中的整行,而不仅仅是受影响的列。如果是这样,那么对于我执行的每个简单整数更新意味着,将不必要地进行复杂的XML验证。

我是否正确理解这一点,如果是这样,我如何通过存储过程来避免需要插入/更新?

1 个答案:

答案 0 :(得分:3)

是的,首先,触发器将触发每次 INSERT或UPDATE操作 - 您不能将其限制为仅在某些列受到影响时触发。您可以检查触发器内部以查看某些列是否已受到影响并根据该列做出决定 - 但您无法阻止触发器首先触发。

其次,是的,当触发器触发时,您将在INSERTED和/或DELETED伪表中拥有基础表的所有列。

您可能希望更改此方法的一种方法是将大型XML列移动到单独的表中,并将该大型XML验证触发器仅放在该表上。在这种情况下,如果仅更新或插入基表,您将获得更少的数据,更少的验证逻辑。只有当您插入或更新到XML表中时,您才能获得全面的验证。