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



对于某些背景。。。我有一个表集合,我希望每个表上都有一个INSERT, UPDATE, DELETE的触发器。SQL Server版本为SQL 2005。

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

这是我在想的过程:

  1. 获取表中sys.columns的列名
  2. 基于列名生成动态sql SELECT查询
  3. Inserted中选择
  4. foreach行,将列值连接到单个变量中
  5. 将变量数据插入Detail

所以,问题是:

这是完成我想要做的事情的最佳方式吗?还有一个更重要的问题,我该如何编写这个查询?

您可以使用FOR XML来实现这一点,只需将结果存储为XML文档即可。

SELECT *
FROM Inserted
FOR XML RAW

将为您提供以数据为中心的xml和

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

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

最新更新