2015-05-06 66 views
0

编织通过XML字符串世界的方式 - 我碰到过这个问题。在SQL中捕获多个具有相同节点名称的XML字符串

所以我有两个超级相似的XML字符串 - 唯一的问题是 - 它们在节点内部具有不同的信息。

XML字符串1:

<DocumentElement> 
<Readings> 
    <ReadingID>1</ReadingID> 
    <ReadingDate>2013-12-19T00:00:00-05:00</ReadingDate> 
    <Sys>120</Sys> 
    <Dia>80</Dia> 
    <PageNumber>4</PageNumber> 
    <AddedDate>2015-04-17T19:30:22.2255116-04:00</AddedDate> 
    <UpdateDate>2015-04-17T19:30:22.2255116-04:00</UpdateDate> 
</Readings> 
<Readings> 
    <ReadingID>2</ReadingID> 
    <ReadingDate>2014-01-10T00:00:00-05:00</ReadingDate> 
    <Sys>108</Sys> 
    <Dia>86</Dia> 
    <PageNumber>8</PageNumber> 
    <AddedDate>2015-04-17T19:32:08.5121747-04:00</AddedDate> 
    <UpdateDate>2015-04-17T19:32:08.5121747-04:00</UpdateDate> 
</Readings> 
</DocumentElement> 

XML字符串2:

<DocumentElement> 
<Readings> 
    <ReadingID>1</ReadingID> 
    <ReadingDate>2013-12-20T00:00:00-05:00</ReadingDate> 
    <Sys>140</Sys> 
    <Dia>70</Dia> 
    <PageNumber>10</PageNumber> 
    <AddedDate>2015-04-17T19:30:22.2255116-04:00</AddedDate> 
    <UpdateDate>2015-04-17T19:30:22.2255116-04:00</UpdateDate> 
</Readings> 
</DocumentElement> 

现在,这真的只是一个例子 - 我能有串无限数量的就是这样的,我会想从中提取数据。在这种情况下,我有两个字符串,我期待以提取<Sys><Dia><ReadingDate>

我也想在表格中显示此信息的所有此类信息:

Reading Date | Sys | Dia 
---------------------------- 
12/29/2013 | 120 | 80 
---------------------------- 
1/10/2014 | 108 | 86 
---------------------------- 
12/20/2013 | 140 | 70 

我完全不确定如何继续这一点 - 任何和所有的帮助表示赞赏!

回答

2

假设这些XML的是一个名为MyXmlColumn一个XML列,在名为MyTable *表,你可以尝试这样的事:

SELECT 
    R.value('ReadingDate[1]', 'DATETIME') as ReadingDate 
    , R.value('Sys[1]', 'INT') as Sys 
    , R.value('Dia[1]', 'INT') as Dia 
FROM MyTable t 
    CROSS APPLY t.MyXmlColumn.nodes('/DocumentElement/Readings') as readings(R) 

SQL Fiddle

*:下一次你应该已经提供了这些信息在第一个地方

+0

@FooBun不要忘记[接受](http://stackoverflow.com/help/someone如果它解决了有问题的问题,那么答案就是答案 – har07

相关问题