我有一个包含大量更新和插入的表。我的想法是每天运行一次工作,调用一个程序对数据中可能出现的数据进行一些更正,例如rtrim
,ltrim
,删除标签,换行符等。< / p>
我想要的是仅在这些作业的ID
,Original Value
和Modified Value
上登录,以跟踪这些变化。
有办法吗?
我不介意在其他方面做出的改变,无论如何,我不想浪费资源。
谢谢
答案 0 :(得分:1)
有几种方法可以解决这个问题。此方法使用output的update query子句来审核更改。我们将使用特殊表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.
;
-- Update data table, and write changes to audit table.
UPDATE
@T
SET
Value = LTRIM(RTRIM(REPLACE(Value, ' ', '')))
OUTPUT
inserted.ID,
deleted.Value AS OldValue,
inserted.Value AS NewValue
INTO
@T_AUDIT
;
-- Verify result.
SELECT
*
FROM
@T_AUDIT
;
返回以下内容。我用下划线替换了空格,以便于阅读。
ID OldValue NewValue
1 _abc abc
2 def_ def
3 ****____**** x