Подтвердить что ты не робот

Как добавить атрибут к корневому элементу xml, сгенерированному SQL Select для xml

В моей базе данных есть несколько таблиц. Каждая из этих таблиц имеет триггер, который запускается при обновлении или удалении, чтобы записывать изменения в таблицу AuditLog. Таблица AuditLog содержит следующее:

Id (PK, int, not null) Действие (nchar (1), а не null) ActionDate (datetime, not null) ActionUser (nvarchar (100), а не null) AuditData (XML (.), А не 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

Это отлично работает, однако, что я хотел бы сделать, это добавить атрибут элемента Root tablename, чтобы XML файл AuditData выглядел примерно так:

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

Есть ли способ сделать это с помощью select from... для выражения xml?

4b9b3361

Ответ 1

Взяв справку этот поток, я смог придумать это и, похоже, работает:

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