有几种方法可以解决这个问题。此方法使用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.
;
更新查询
-- 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