开发者社区> 问答> 正文

SQL:如何从长xml字符串中提取想要的子字符串?

我有一列在我的SQL表中包含XML值。我必须阅读以下三个元素中的值:

<POSTN_ID>0000-0000H1-POS</POSTN_ID>
<ROLE_ID>0000-00002B-ROL</ROLE_ID>
<STATUS>1</STATUS>

在这种情况下,哪些SQL方法可以为我提供帮助?

<parameter name="OrgHierarchyDatasets_diffgram">
  <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    <NewDataSet>
      <PositionRoles diffgr:id="PositionRoles1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
          <POSTN_ID>0000-0000H1-POS</POSTN_ID>
          <ROLE_ID>0000-00002B-ROL</ROLE_ID>
          <STATUS>1</STATUS>
      </PositionRoles>
    </NewDataSet>
  </diffgr:diffgram>
</parameter>
<parameter name="ExistNodeCheck" type="System.Boolean">True</parameter>

展开
收起
祖安文状元 2020-01-04 15:41:15 670 0
1 条回答
写回答
取消 提交回答
  • 以下语法可以帮助您,捕获定义的对象并将其带到表模型中。

    DECLARE @xml xml = '
    <parameter name="OrgHierarchyDatasets_diffgram">
      <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
        <NewDataSet>
          <PositionRoles diffgr:id="PositionRoles1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
              <POSTN_ID>0000-0000H1-POS</POSTN_ID>
              <ROLE_ID>0000-00002B-ROL</ROLE_ID>
              <STATUS>1</STATUS>
          </PositionRoles>
        </NewDataSet>
      </diffgr:diffgram>
    </parameter>
    <parameter name="ExistNodeCheck" type="System.Boolean">True</parameter>'
    
    SELECT  
           Tbl.Col.value('POSTN_ID[1]', 'nvarchar(50)') AS POSTN_ID,
           Tbl.Col.value('ROLE_ID[1]', 'nvarchar(50)') AS ROLE_ID,
           Tbl.Col.value('STATUS[1]', 'nvarchar(50)') AS STATUS
    FROM   @xml.nodes('//PositionRoles') Tbl(Col)
    
    2020-01-04 15:41:30
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载