创建SQL触发器查询以将所有列更改转储为单个变量

时间:2012-01-07 22:08:30

标签: sql-server sql-server-2005 dynamic triggers

对于某些背景......我有一组表格,我希望INSERT, UPDATE, DELETE的每个表都有一个触发器。 SQL Server版本是SQL 2005。

我有一个审核表Audit,其中包含一个名为Detail的列。我的最终目标是创建一个触发器,它将获取其表的列列表,从Inserted,Updated或Deleted生成动态选择查询,执行一些字符串连接,并将该值转储到DetailAudit

这是我想的过程:

  1. 获取sys.columns
  2. 表格中的列名称
  3. 根据列名称生成动态sql SELECT查询
  4. Inserted
  5. 中选择
  6. 结果中的foreach行,将列值连接成单个变量
  7. 将变量数据插入Detail
  8. 所以,问题:

    这是完成我要做的事情的最佳方式吗?更重要的问题是,如何编写此查询?

1 个答案:

答案 0 :(得分:3)

您可以使用FOR XML,只将结果存储为XML文档。

SELECT *
FROM Inserted
FOR XML RAW

将为您提供以attibute为中心的xml和

SELECT *
FROM Inserted
FOR XML PATH('row')

将为您提供以元素为中心的xml。比试图识别列并连接它们容易得多。