我有一个表有很多的更新和插入。我的想法是每天运行一次工作,调用一个程序,对数据中可能出现的此表进行一些更正,如rtrim
,ltrim
,删除标签,换行符等。审计表只在特定情况下
我想要的是只记录这些工作中的ID
,Original Value
和Modified Value
,以跟踪这些变化。
有没有办法做到这一点?
我不介意其他方式所做的更改,我不想浪费资源。
谢谢
我有一个表有很多的更新和插入。我的想法是每天运行一次工作,调用一个程序,对数据中可能出现的此表进行一些更正,如rtrim
,ltrim
,删除标签,换行符等。审计表只在特定情况下
我想要的是只记录这些工作中的ID
,Original Value
和Modified Value
,以跟踪这些变化。
有没有办法做到这一点?
我不介意其他方式所做的更改,我不想浪费资源。
谢谢
有几种方法可以解决这个问题。此方法使用update query的output子句来审核更改。我们将使用特殊表inserted and deleted来捕捉旧的和新的值。
如果您打算每天运行更新,则可以将此技术嵌入SSIS job。 SQL Agent可以按照固定的时间表为你工作。
-- Sample data table.
DECLARE @T TABLE
(
ID INT,
Value VARCHAR(255)
)
;
-- Sample audit table.
DECLARE @T_AUDIT TABLE
(
ID INT,
OldValue VARCHAR(255),
NewValue VARCHAR(255)
)
;
-- Let's add some records to experiment with...
INSERT INTO @T
(
ID,
Value
)
VALUES
(1, ' abc'),
(2, 'def '),
(3, '*** ****') -- Using 4 spaces to represent a tab.
;
这将返回下面。我用下划线替换空格,以便阅读。
ID OldValue NewValue
1 _abc abc
2 def_ def
3 ****____**** x
这就是我正在寻找的。谢谢! – Antonio
在你的程序本身编写代码来捕获之前值和之后的值。并在审计表中插入。所以,在这种特殊情况下,只有你会做审计。 –