加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何向SQL的Select for xml生成的xml的根元素添加

发布时间:2020-12-12 08:44:49 所属栏目:MsSql教程 来源:网络整理
导读:我的数据库中有很多表.这些表中的每一个都有触发器在更新或删除时触发,以将更改记录到AuditLog表. AuditLog表包含以下内容: Id(PK,int,not null) Action(nchar(1),not null) ActionDate(datetime,not null) ActionUser(nvarchar(100),not null) AuditData(XM
我的数据库中有很多表.这些表中的每一个都有触发器在更新或删除时触发,以将更改记录到AuditLog表. AuditLog表包含以下内容:

Id(PK,int,not null)
Action(nchar(1),not null)
ActionDate(datetime,not null)
ActionUser(nvarchar(100),not null)
AuditData(XML(.),not null)

在我的触发器中,我正在做如下事情:

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

这很好,但是,我想做的是向tablename的根元素添加一个属性,以便AuditData xml看起来像:

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

有没有办法通过select for … for xml语句来实现这一点?

解决方法

从 this线程的帮助下,我能够想出这一点,似乎有效:
select 'Person' as "@tableName",(select * from deleted for xml path('DataItem'),type)
 for xml path('Root')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读