在sql server中读取和拆分XML重复标记

时间:2016-04-06 17:07:36

标签: sql xml sql-server-2005

我有这个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

任何线索?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用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)