我有一个带有简单标识列主键的表。我编写了一个“ For Update”触发器,除其他外,该触发器应将某些列的更改记录到日志表中。不用说,这是我第一次尝试。
基本上如下:
Declare Cursor1 Cursor for
select a.*, b.*
from inserted a
inner join deleted b on a.OrderItemId = b.OrderItemId
(其中OrderItemId
是主身份密钥的实际名称)。
然后,我照常打开光标并进入获取下一个循环。使用要测试的列,我可以这样做:
如果Update(Field1) 开始 .....做一些记录 结束
这些列包括varchars,位和日期时间。有时可以。问题在于log函数正在将字段的a和b值写入日志,并且在某些情况下,before和after值似乎是相同的。
我有2个问题:
答案 0 :(得分:1)
如果您使用的是SQL Server 2016或更高版本,建议您完全跳过此触发器,而不要使用system-versioned temporal tables。
不仅消除了触发器的需要(以及性能问题),而且查询历史数据也更加容易。