I have an Hl7 message in xml mode like this (obviusly I hidden some parts)
<HL7Message>
<SPM>
<SPM.4>
<SPM.4.1>P</SPM.4.1>
<SPM.4.2>PL</SPM.4.2>
</SPM.4>
</SPM>
<OBX>
<OBX.3>
<OBX.3.1>514@2</OBX.3.1>
<OBX.3.2>OsmoP</OBX.3.2>
<OBX.3.3>L</OBX.3.3>
</OBX.3>
<OBX.3>
<OBX.3.1>16070</OBX.3.1>
<OBX.3.2>OsmoP</OBX.3.2>
<OBX.3.3>ET</OBX.3.3>
</OBX.3>
<OBX.5>
<OBX.5.1>311</OBX.5.1>
</OBX.5>
</OBX>
<SPM>
<SPM.4>
<SPM.4.1>U</SPM.4.1>
<SPM.4.2>UR</SPM.4.2>
</SPM.4>
</SPM>
<OBX>
<OBX.3>
<OBX.3.1>735@2</OBX.3.1>
<OBX.3.2>OsmoU</OBX.3.2>
<OBX.3.3>L</OBX.3.3>
</OBX.3>
<OBX.5>
<OBX.5.1>331</OBX.5.1>
</OBX.5>
</OBX>
</HL7Message>
I need to retrieve in TSQL a table like this
PL 514@2~OsmoPL 16070~OsmoPL
UR 735@2~OsmoUR
I tried with this
select
col.query('for $i in ./OBX.3/OBX.3.1 return concat($i, "~")').value('.','varchar(200)') tbCODEs,
col.query('for $i in ./OBX.3/OBX.3.2 return concat($i, "~")').value('.','varchar(200)') tbDESCs,
col.query('for $i in ../SPM/SPM.4/SPM.4.2 return concat($i,"~")').value('.','varchar(200)') tbSPM
from
@xmlData.nodes('//HL7Message/OBX') as ref(col)
where variable @xmlData is the xml above. but this doesn't work. Anyone can help me?
Thanks
select
spm.query('//SPM/SPM.4/SPM.4.2/text()'),
obx.query('//OBX/OBX.3[1]/*/text()'),
obx.query('//OBX/OBX.3[2]/*/text()')
from
(
select
@xmlData.query('//HL7Message/SPM[sql:column("number")]') as SPM,
@xmlData.query('//HL7Message/OBX[sql:column("number")]') as OBX
from
(select number from master..spt_values
where type='p' and number between 1 and @xmlData.value('count(/HL7Message/SPM)','int')
) v
) items
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.