sql-server - 如何将属性添加到由 SQL 的 Select for xml 生成的 xml 的根元素

标签 sql-server

我的数据库中有许多表。每个表都有一个触发器,在更新或删除时触发,以将更改记录到 AuditLog 表中。 AuditLog 表包含以下内容:

Id(PK,整数,不为空) 操作(nchar(1),不为空) ActionDate(日期时间,不为空) ActionUser(nvarchar(100),不为空) AuditData(XML(.),不为空)

在我的触发器中,我正在执行以下操作:

DECLARE @auditBody XML
SET @auditBody = (select * from deleted as Root for xml auto, elements)
insert into dbo.AuditLog 
   (Action, ActionDate, ActionUser, AuditData)
   select Case
        When I.Id is not null then 'U'
        Else 'D'
       End as Action
     ,getdate() as ActionDate
     ,suser_name() as ActionUser
     ,@auditBody as AuditData
  From
    deleted D Left Join
    inserted I on D.Id = I.Id

这很好用,但是,我想要做的是向表名的 Root 元素添加一个属性,以便 AuditData xml 看起来像这样:

<Root tableName = "Person">
    <Id>132</Id>
    <FirstName>Ryan</FirstName>
    ...
</Root>

有什么方法可以通过 select from ... for xml 语句来完成此操作吗?

最佳答案

this 寻求帮助线程,我能够想出这个并且它似乎有效:

select 'Person' as "@tableName",
 (select * from deleted for xml path('DataItem'), type)
 for xml path('Root')

关于sql-server - 如何将属性添加到由 SQL 的 Select for xml 生成的 xml 的根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270348/

相关文章:

sql-server - 如何处理 "remapping can only be done for users that were mapped to Windows or SQL logins"

ruby-on-rails - 从 Ubuntu 上运行的 Ruby on Rails 应用程序连接到 MSSQL 数据库

sql-server - 如何调整sql查询中的小数位

SQL DATEDIFF 如果数字为正则添加加号

sql - 桥接表主键或复合/复合键

sql-server - 从“邮件”选项卡SSMS捕获内容

sql-server - 无法参与交易

sql-server - SQL 服务器 : Selective XML Index not being efficiently used

mysql - 我无法仅根据全局标识符判断一行位于哪个数据库中

python - 连接到 Linux 上的 MSSQL Server 2008