【发布时间】:2019-07-06 06:40:48
【问题描述】:
在Update Trigger 中获取所有修改字段列表的最简单方法是什么?
我能想到的最紧凑的方法是做一些类似的事情:
IF EXISTS(SELECT 1 FROM INSERTED INNER JOIN DELETED ON INSERTED.[FIELD_TO_CHECK] = DELETE.[FIELD_TO_CHECK])
但这意味着我必须对我想要检查的每个字段都执行此操作。我将不胜感激使用 cursor 包含有关所有修改字段的信息的方法。
(这不需要为大规模更新工作,不需要在 INSERTED 或 DELETED 中期望超过 1 条记录)
我添加了一个 if 语句来忽略大量更新,因为它们属于不同的类别。
【问题讨论】:
-
“在插入或删除中不需要期望超过 1 条记录”,直到你明白这一点......最好不要假设这样的假设。
-
当您发现哪些列已更新时,您的实际目标是什么?如果它只是记录旧值,那么通常您只需完整记录整行是否有 1 或 100 列已更新。否则,可能是SQL update trigger only when column is modified的重复?
-
如果您不希望获得多行并且不打算正确处理多行,那么您的触发器应该通过在遇到多行时抛出错误来强制执行此假设。为什么?因为它总有一天会发生。
-
如果你想要一种带有 CURSOR 的方法,为什么不写一个?
-
@TabAlleman 我在问是否有任何方法可以使用光标选择所有修改过的字段并为每个字段执行特定操作
标签: sql sql-server tsql triggers sql-server-2008-r2