2013-11-07 3 views
1

У меня есть xml, ниже которого я пытаюсь преобразовать в таблицу.SQL конвертировать многоуровневый 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 

Я попытался заявление ниже, но он продолжает приходить с NULL значениями для обоих (ItemID, ObjId) колонны.

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) 

ответ

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); 
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

 Смежные вопросы

  • Нет связанных вопросов^_^