【问题标题】:Read and split XML repeated tags in sql server在sql server中读取和拆分XML重复标签
【发布时间】:2016-04-06 17:07:36
【问题描述】:

我有这个 XML

<Flujo>
<nodes>
<Nombre>QWERTY</Nombre>
<NombreProceso>Nodo 2</NombreProceso>
<ProcesoTipo>4</ProcesoTipo>
<SolicitudTipo>1</SolicitudTipo>
<Rol>Ejecutivo de plaza: 1</Rol>
<Rol>Supervisor de creditos: 2</Rol>
<Rol>Supervisor de tesoreria: 2</Rol>
</nodes>
</Flujo>

我可以阅读它,但我只得到一个标签。之后我想拆分每个标签来得到这个

        Rol                   Permiso
 Ejecutivo de Plaza              1
 Supervisor de creditos          2
Supervisor de tesoreria          2

有什么线索吗?

谢谢

【问题讨论】:

  • 你要使用什么 sql?

标签: sql xml sql-server-2005


【解决方案1】:

您可以使用 xquery 路径执行此操作,以下是获取预期输出的 sql 代码

        DECLARE @xml xml
        SET @xml = 
        '<Flujo>
        <nodes>
        <Nombre>QWERTY</Nombre>
        <NombreProceso>Nodo 2</NombreProceso>
        <ProcesoTipo>4</ProcesoTipo>
        <SolicitudTipo>1</SolicitudTipo>
        <Rol>Ejecutivo de plaza: 1</Rol>
        <Rol>Supervisor de creditos: 2</Rol>
        <Rol>Supervisor de tesoreria: 2</Rol>
        </nodes>
        </Flujo>'




        SELECT  
        SUBSTRING(b.value('(./text())[1]','varchar(50)'),1,CHARINDEX(':',b.value('(./text())[1]','varchar(50)'))-1) Rol,
        SUBSTRING(b.value('(./text())[1]','varchar(50)'),CHARINDEX(':',b.value('(./text())[1]','varchar(50)'))+1,LEN(b.value('(./text())[1]','varchar(50)'))) Permiso 
        FROM @xml.nodes('/Flujo/nodes/Rol') as a(b) 

【讨论】:

  • 我喜欢你的回答,但我需要在 SQL Server 2005 中处理这个问题
  • 谢谢,我很困惑,我已经用 sql 查询更新了答案以获得您预期的输出。请检查一下
猜你喜欢
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多