【问题标题】:Create SQL trigger query to dump all column changes into single variable创建 SQL 触发器查询以将所有列更改转储到单个变量中
【发布时间】:2012-02-05 02:35:39
【问题描述】:

对于某些背景...我有一组表,我想在每个表上为INSERT, UPDATE, DELETE 设置一个触发器。 SQL Server 版本是 SQL 2005。

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

这是我想的过程:

  1. 获取表中sys.columns 的列名
  2. 根据列名生成动态sqlSELECT查询
  3. Inserted中选择
  4. 对于结果中的每一行,将列值连接到单个变量中
  5. 将变量数据插入Detail

所以,问题:

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

【问题讨论】:

  • 你有什么版本的 SQL Server - 2000、2005、2008、2008R2?哪个版本 - 标准版、企业版?如果不少于 2008 年企业 - 您是否检查过 CDC(更改数据捕获)?

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


【解决方案1】:

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

SELECT *
FROM Inserted
FOR XML RAW

将为您提供以属性为中心的 xml,并且

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2011-09-02
    • 2022-07-21
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多