代码之家  ›  专栏  ›  技术社区  ›  IamIC

SQL Server中“插入后更新”触发器的行为

  •  1
  • IamIC  · 技术社区  · 14 年前

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

    但是,我也有这样的场景,我经常更新不需要验证的简单整数列。从我所读到的 here ,当我执行更新时,SQL Server似乎将返回temp in memory“inserted”表中的整行,而不仅仅是受影响的列。如果是这样,那么这意味着对于我执行的每一个简单的整数更新,复杂的XML验证都将不必要地完成。

    我是否正确地理解了这一点?如果理解了,我如何通过存储过程来解决这一需要插入/更新的问题?

    1 回复  |  直到 14 年前
        1
  •  3
  •   marc_s    14 年前

    是的,首先,触发器会触发 插入或更新操作-不能将其限制为仅在某些列受到影响时才触发。您可以检查触发器内部以查看某些列是否受到影响,并基于此做出决策—但您不能首先阻止触发器触发。

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

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