How would I specify the following XML Hierarchy into readable columns in Microsoft SQL?
<transaction id=1>
<item id=1>
<price>1</price>
</item>
<item id=2>
<price>1</price>
</item>
</transaction>
<transaction>
<item id=1>
<price>1</price>
</item>
</transaction>
for instance
select
x.i.value('(????)','Varchar(max)') [TransId]
x.i.value('(????)','Varchar(max)') [ItemId]
x.i.value('(????)','Varchar(max)') [PriceId]
from @xml.nodes('/transaction') x(i)
Thanks in advance.
Actually usually it's faster to shred XML from parent to child using apply
, like this:
select
t.c.value('@id','int') as TransId,
i.c.value('@id','int') as ItemId,
i.c.value('(price/text())[1]', 'int') as PriceId
from @xml.nodes('transaction') as t(c)
outer apply t.c.nodes('item') as i(c)
order by TransId, ItemID