【问题标题】:Read XML nodes as rows in SQL Server在 SQL Server 中将 XML 节点读取为行
【发布时间】:2017-08-21 16:03:58
【问题描述】:

我将以下 XML 存储在表的 XML 列中:

<MessageResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <MessageContainer>
    <DocumentType xmlns="urn:www:bebe:de:b2b:v01">Testdata</DocumentType>
    <Payload xmlns="urn:www:bebe:de:b2b:v01">
      <Testdata xmlns:ns0="un:unece:260:data:ron_data:v1">
        <PayloadResponseEvent>
          <Identification>2970729807</Identification>
          <StatusType listAgencyIdentifier="6">accepted</StatusType>
          <OriginalDocument>2769262</OriginalDocument>
        </PayloadResponseEvent>
        <PayloadResponseEvent>
           <Identification>2970729809</Identification>
          <StatusType listAgencyIdentifier="6">rejected</StatusType>
          <OriginalDocument>2769269</OriginalDocument>
        </PayloadResponseEvent>
      </Testdata>
    </Payload>
  </MessageContainer>
</MessageResponse>

我想创建一个选择,在其中我获取基于 PayloadResponseEvent 的列,例如:

Identification        StatusType    OriginalDocument
----------------------------------------------------
2970729807            accepted      2769262
2970729809            rejected      2769269

我尝试了许多基于节点和值的不同 SQL / XML 语句,但找不到获取这些数据的简单方法。命名空间也在阻碍。

任何人都可以提供解决方案吗?

谢谢

【问题讨论】:

  • 这不是代码编写服务。向我们展示您到底尝试了什么以及问题所在。

标签: sql xml xquery


【解决方案1】:
WITH XMLNAMESPACES (DEFAULT 'urn:www:bebe:de:b2b:v01')
SELECT 
    d.p.value('./Identification[1]', 'BIGINT') AS [Identification]
    ,d.p.value('./StatusType[1]', 'NVARCHAR(100)') AS [StatusType]
    ,d.p.value('(./StatusType/@listAgencyIdentifier)[1]', 'int') AS [ListAgencyIdentifier]
    ,d.p.value('./OriginalDocument[1]', 'BIGINT') AS [OriginalDocument]
FROM [yourtable] [t]
CROSS APPLY [t].[yourcolumn].nodes('//PayloadResponseEvent') AS d(p)

【讨论】:

  • 非常感谢!这正是我所需要的。我猜问题出在 XMLNAMESPACES 和节点('//PayloadResponseEvent')。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多