我有一个更新后触发器,它将记录 ID 排队到另一个表中,以便稍后进行进一步处理。它用于inserted
获取要处理的记录的 ID。
如果唯一的更改是某一特定列,我现在想排除排队到该表的某些记录。如果该列之外的任何其他列发生更改,我仍然想将记录排队。
如何确定是否仅更改了一个特定列?
我看过UPDATE(),但似乎我需要列出表格中的所有其他 47 列,这是我想避免的。
COLUMNS_UPDATED如如何使用 COLUMNS_UPDATED 来检查某些列是否已更新?看起来很有希望,但我无法让它发挥作用。我想排除的列的 ColumnID 为 30。根据我的计算,这给了我536,870,912 ( SELECT POWER(2, 30 - 1)
)的整数位掩码。
当我只对列进行 UPDATE 时,我想排除COLUMNS_UPDATED()
返回的0x000000200040。这将给出一个位模式,表明更新了两个完全不同的列。列 ID 为 7 (2^(7-1)=64) 和 22 (2^(22-1)=2,097,152)。
我不确定采用这种方法是否值得。似乎可以轻松比较其他字段的任何更改。
更新: 我已经在插入和删除之间使用 CHECKSUM 比较其他字段。我不想使用这种方法,因为如果将来将其他字段添加到表中,它可能会导致问题。也有可能发生哈希冲突。