使用插入和删除的表进行日志记录-我的概念是否正确?

时间:2019-06-01 09:00:23

标签: sql-server

我有一个带有简单标识列主键的表。我编写了一个“ 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个问题:

  • 我是否正确使用了Update函数?
  • 我可以正确访问前后值吗?
  • 有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server 2016或更高版本,建议您完全跳过此触发器,而不要使用system-versioned temporal tables

不仅消除了触发器的需要(以及性能问题),而且查询历史数据也更加容易。