2017-01-27 119 views
0

我有一个表有很多的更新和插入。我的想法是每天运行一次工作,调用一个程序,对数据中可能出现的此表进行一些更正,如rtrim,ltrim,删除标签,换行符等。审计表只在特定情况下

我想要的是只记录这些工作中的ID,Original ValueModified Value,以跟踪这些变化。

有没有办法做到这一点?

我不介意其他方式所做的更改,我不想浪费资源。

谢谢

+0

在你的程序本身编写代码来捕获之前值和之后的值。并在审计表中插入。所以,在这种特殊情况下,只有你会做审计。 –

回答

1

有几种方法可以解决这个问题。此方法使用update queryoutput子句来审核更改。我们将使用特殊表inserted and deleted来捕捉旧的和新的值。

如果您打算每天运行更新,则可以将此技术嵌入SSIS jobSQL 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 
+0

这就是我正在寻找的。谢谢! – Antonio