在sql server中读取和拆分XML重复标记
我有这个XML在sql server中读取和拆分XML重复标记,sql,xml,sql-server-2005,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&g
<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>
有线索吗
谢谢,您可以使用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)
DECLARE@xml
SET@xml=
'
QWERTY
野二号
4.
1.
Ejecutivo de plaza:1
信贷主管:2名
特索雷里亚主管:2名
'
挑选
子字符串(b.value(“(./text())[1]”,'varchar(50)”),1,CHARINDEX(“:”,b.value(“(./text())[1]”,'varchar(50)”))-1)Rol,
子字符串(b.value(“(./text())[1]”,'varchar(50)”),CHARINDEX(“:”,b.value(“(./text())[1]”,'varchar(50)”))+1,LEN(b.value(“(./text())[1]”,'varchar(50)))Permiso
从@xml.nodes('/Flujo/nodes/Rol')作为a(b)
您想使用什么sql?我喜欢您的答案,但我需要在sql server 2005中处理此问题。谢谢,我感到困惑,我已使用sql query更新了答案,以获得您的预期输出。请检查一下
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)