在SQL中捕获具有相同节点名称的多个XML字符串

在SQL中捕获具有相同节点名称的多个XML字符串,sql,sql-server,xml,nodes,Sql,Sql Server,Xml,Nodes,在XML字符串世界中穿行——我遇到了这个问题 所以我有两个非常相似的XML字符串-唯一的问题是-它们在节点中有不同的信息 XML字符串1: <DocumentElement> <Readings> <ReadingID>1</ReadingID> <ReadingDate>2013-12-19T00:00:00-05:00</ReadingDate> <Sys>120</Sys> &

在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位于名为
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)

*:下次你应该首先提供这些信息时

@FooBun如果它解决了问题,不要忘记回答
Reading Date |  Sys  | Dia
----------------------------
12/29/2013   |  120  | 80
----------------------------
1/10/2014    |  108  | 86
----------------------------
12/20/2013   |  140  | 70
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)