簡體   English   中英

如何在TSQL中查詢XML列(HL7消息)

[英]How to Query an XML column in TSQL (Hl7 message)

我在xml模式下有這樣的Hl7消息(顯然我隱藏了一些部分)

<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>

我需要在TSQL中檢索這樣的表

PL 514@2~OsmoPL 16070~OsmoPL
UR 735@2~OsmoUR 

我嘗試了這個

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)

其中變量@xmlData是上面的xml。 但這不起作用。 有人可以幫助我嗎?

謝謝

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM