对于某些背景。。。我有一个表集合,我希望每个表上都有一个INSERT, UPDATE, DELETE
的触发器。SQL Server版本为SQL 2005。
我有一个审核表Audit
,其中包含一个名为Detail
的列。我的最终目标是创建一个触发器,该触发器将获取其表的列列表,从Inserted、Updated或Deleted生成一个动态选择查询,进行一些字符串串联,并将该值转储到Audit
的Detail
列中。
这是我在想的过程:
- 获取表中
sys.columns
的列名 - 基于列名生成动态sql
SELECT
查询 - 从
Inserted
中选择 - foreach行,将列值连接到单个变量中
- 将变量数据插入
Detail
列
所以,问题是:
这是完成我想要做的事情的最佳方式吗?还有一个更重要的问题,我该如何编写这个查询?
您可以使用FOR XML来实现这一点,只需将结果存储为XML文档即可。
SELECT *
FROM Inserted
FOR XML RAW
将为您提供以数据为中心的xml和
SELECT *
FROM Inserted
FOR XML PATH('row')
将为您提供以元素为中心的xml。比试图识别列并将其连接要容易得多。