クエリ内の既存のノードに属性を追加する方法が見つかりませんでした。もちろん、テーブルから一時テーブルを作成し、一時テーブルのXMLを変更して、一度に1つの属性を追加することもできます。
もう1つのオプションは、これが難しいという事実を受け入れて、すべてのデータを含むが、希望どおりの方法ではないXMLを作成することを決定することです。たとえば、このクエリ。
select *
from YourTable
for xml raw
このようなXMLを提供します。
<row EntryID="1" TableName="Manufacturers" AuditDate="2013-01-30T15:48:24.690" ChangeType="U">
<AuditValue>
<row ManufacturerID="6" ManufacturerName="AMES999" IsDeleted="0" Concurrency="AAAAAAABTAk=" />
</AuditValue>
</row>
またはあなたはこれを使うことができます
select EntryID as '@EntryID',
TableName as '@TableName',
AuditDate as '@AuditDate',
ChangeType as '@ChangeType',
AuditValue as '*'
from YourTable
for xml path('row')
XMLを取得するには
<row EntryID="1" TableName="Manufacturers" AuditDate="2013-01-30T15:48:24.690" ChangeType="U">
<row ManufacturerID="6" ManufacturerName="AMES999" IsDeleted="0" Concurrency="AAAAAAABTAk=" />
</row>
これで本当に醜くなる準備ができているなら、XMLと文字列操作の組み合わせを試すことができます。
select cast(replace(cast(AuditValue as nvarchar(max)), '/>', '') +
stuff(cast((
select EntryID, TableName, AuditDate, ChangeType
for xml raw, type
) as nvarchar(max)) ,1 , 4, '') as xml) as AuditValue
from YourTable
結果:
<row ManufacturerID="6"
ManufacturerName="AMES999"
IsDeleted="0"
Concurrency="AAAAAAABTAk="
EntryID="1"
TableName="Manufacturers"
AuditDate="2013-01-30T15:48:24.690"
ChangeType="U" />
SQLフィドル