我正在尝试将其转换为表格中的xml。
declare @X xml =
'<root>
<items>
<item ItemID="100">
<obj ObjID="0001" value="val1"/>
<obj ObjID="0002" value="val2"/>
<obj ObjID="0003" value="val3"/>
<obj ObjID="0004" value="val4"/>
</item>
<item ItemID="200">
<obj ObjID="0001" value="val1"/>
<obj ObjID="0002" value="val2"/>
<obj ObjID="0003" value="val3"/>
<obj ObjID="0004" value="val4"/>
</item>
</items>
</root>'
如何将上述xml转换为如下所示的表结构:
ItemID ObjID
100 0001
100 0002
100 0003
100 0004
200 0001
200 0002
200 0003
200 0004
我已经尝试过以下语句,但它继续使用(ItemID,ObjID)列的NULL值。
select
t.col.value('(/item/@ItemID)[1]', 'nvarchar(16)') as [ItemID],
t.col.value('(/item/obj/@ObjID)[1]', 'nvarchar(16)') as [ObjID]
from
@X.nodes('/root/items') as t(col)
答案 0 :(得分:2)
尝试此查询
SELECT
Tbl.Col.value('../@ItemID', 'nvarchar(16)') as [ItemID],
Tbl.Col.value('@ObjID', 'nvarchar(16)') as [ObjID]
FROM
@x.nodes('root/items/item/obj') Tbl(Col);
答案 1 :(得分:2)
select
i.col.value('@ItemID', 'nvarchar(16)') as [ItemID],
o.col.value('@ObjID', 'nvarchar(16)') as [ObjID]
from @X.nodes('/root/items/item') as i(col)
outer apply i.col.nodes('obj') as o(col)
<强> sql fiddle demo 强>