Sql server 仅在特定情况下审核表

Sql server 仅在特定情况下审核表,sql-server,triggers,sql-server-2012,Sql Server,Triggers,Sql Server 2012,我有一个有很多更新和插入的表。我的想法是每天运行一次作业,调用一个过程对数据中可能出现的表进行一些更正,如rtrim、ltrim、删除制表符、换行符等 我想要的是只将这些作业的ID、原始值和修改值记录在一个表上,以跟踪这些更改 有办法吗 我不介意在其他方面做出改变,而且无论如何,我不想在这方面浪费资源 谢谢有几种方法可以解决这个问题。此方法使用的子句审核更改。我们将使用特殊的表来捕获新旧值 如果您计划每天运行更新,您可以将此技术嵌入到一个应用程序中。可以按固定的时间表为您运行作业 样本数据 更新

我有一个有很多更新和插入的表。我的想法是每天运行一次作业,调用一个过程对数据中可能出现的表进行一些更正,如
rtrim
ltrim
、删除制表符、换行符等

我想要的是只将这些作业的
ID
原始值
修改值
记录在一个表上,以跟踪这些更改

有办法吗

我不介意在其他方面做出改变,而且无论如何,我不想在这方面浪费资源


谢谢

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

如果您计划每天运行更新,您可以将此技术嵌入到一个应用程序中。可以按固定的时间表为您运行作业

样本数据 更新查询 这将返回以下结果。我用下划线代替了空格,以便于阅读

ID  OldValue        NewValue
1   _abc            abc
2   def_            def
3   ****____****    x

在过程本身中,编写代码以捕获before值和after值。并在审核表中插入。所以,在这种特殊情况下,只有你会做审计。这正是我想要的。非常感谢。
-- 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