将插入和删除的表转换为审计表?

时间:2015-03-12 07:52:51

标签: sql-server

根据以下SQLFiddle,我需要审核表格中的更改。

触发器应在审计表中插入2条记录,“changes”列应如下所示:

id||1^name||Mr.^

表示第一次插入,并且:

id||1^name||Mrs.^

第二次插入。

SQL语句应该是动态的,它应该循环遍历inserted和/或deleted表,对于找到的每一行,循环遍历列并构建一个将被写回的字符串审计表的changes列。

是否有可能在触发器中实现此目的?是否可以保持触发器通用,因此需要明确知道列名称吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要使用不同的触发器进行更新,插入和删除。 为每个人尝试这些陈述:

-- for insert
INSERT INTO audit(
  item_table, 
  changes) 
SELECT
  'titles',
  [id] + '|^NULL|' + inserted.[name] + '^'

-- for update
INSERT INTO audit(
  item_table, 
  changes) 
SELECT
  'titles',
  [id] + '|^' + deleted.[name] + '|' + inserted.[name] + '^'


-- for delete
INSERT INTO audit(
  item_table, 
  changes) 
SELECT
  'titles',
  [id] + '|^' + deleted.[name] + '|NULL^'