Sql server 使用插入和删除的表进行日志记录-我的概念合理吗?
我有一个带有简单标识列主键的表。我已经编写了一个“For Update”触发器,其中包括将某些列的更改记录到日志表中。不用说,这是我第一次尝试这个 基本如下:Sql server 使用插入和删除的表进行日志记录-我的概念合理吗?,sql-server,Sql Server,我有一个带有简单标识列主键的表。我已经编写了一个“For Update”触发器,其中包括将某些列的更改记录到日志表中。不用说,这是我第一次尝试这个 基本如下: Declare Cursor1 Cursor for select a.*, b.* from inserted a inner join deleted b on a.OrderItemId = b.OrderItemId (其中,OrderItemId是主标识键的实际名称) 然后,我执行通常
Declare Cursor1 Cursor for
select a.*, b.*
from inserted a
inner join deleted b on a.OrderItemId = b.OrderItemId
(其中,OrderItemId
是主标识键的实际名称)
然后,我执行通常的操作,打开光标并进入下一个fetch循环。对于要测试的列,我执行以下操作:
如果更新(字段1)
开始
..... 做些日志记录
结束
列包括varchar、bits和datetimes。它有时会起作用。问题是log函数正在将字段的a和b值写入日志,在某些情况下,前后值似乎相同
我有两个问题:
- 我是否正确使用更新功能李>
- 我是否正确访问前后值
- 有更好的办法吗
它不仅消除了对触发器的需求(以及围绕触发器的性能问题),还可以更轻松地查询历史数据。您应该尽最大努力避免在触发器中放置光标。触发器应该是非常小、灵活、快速的,而光标绝对不是。。。。。。我建议您花时间研究基于集合的方法-将
插入到使用选择,测试已删除的d
中的列是否与插入的i
中的列不同:…其中d.column i.column
,如果是这种情况,则插入数据。@marc\u感谢您贡献宝贵的时间,我将花时间研究基于集合的方法。下面是一篇关于基于集合的触发器的好博客: