2012-09-04 18 views
11

Veritabanımda birkaç tablo var. Bu tabloların her biri, bir AuditLog tablosuna değişiklikleri kaydetmek için güncelleme veya silme işlemine tetikleyen bir tetikleyiciye sahiptir. Auditlog Tablo aşağıdakileri içerir:SQL'in xml için oluşturduğu xml'nin kök öğesine nasıl öznitelik ekleyebilirim?

Id (PK, int boş değil) Eylem (nchar (1), boş olmayan) ActionDate (tarih saat, boş olmayan) ActionUser (nvarchar (100) değil, boş) AuditData (. XML() değil, null) benim tetik olarak

, aşağıdaki gibi bir şey yapıyorum: Bu işler

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 

Ancak şunu da eklemek yapmanız harika istiyorum AuditData xml'nin şöyle bir şey görebilmesi için tablename'ın Root öğesine bir özellik:

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

Bunu, xml ifadesi için ... seçimiyle gerçekleştirmenin herhangi bir yolu var mı?

cevap

18

this iplik yardım alarak, ben böyle bir cevap başardı ve o iş gibi görünüyor:

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