簡體   English   中英

在SQL Server中選擇XML節點

[英]Pick XML nodes in SQL server

我在SQL Server表中有XML,數據看起來像這樣

DECLARE @XML XML
DECLARE @output XML
SET @XML='<ROOT>
    <HDR>
        <NBR>21</NBR>
        <DT>2009-08-17</DT>
    </HDR>
    <OTHERINFO>
        <RAT>
          <ASMT_DT>2015-08-10</ASMT_DT>
        </RAT>
        <RAT>
          <ASMT_DT>2014-08-10</ASMT_DT>
          <INDICATOR>1</INDICATOR>
        </RAT>
        <RAT>
          <ASMT_DT>2013-08-10</ASMT_DT>
          <INDICATOR>1</INDICATOR>
        </RAT>
    </OTHERINFO>
</ROOT>'

我想用節點不具有 <INDICATOR>1</INDICATOR>節點打印XML,即像這樣

SET @output=
'<ROOT>
    <HDR>
        <NBR>21</NBR>
        <DT>2009-08-17</DT>
    </HDR>
    <OTHERINFO>
        <RAT>
           <ASMT_DT>2015-08-10</ASMT_DT>
        </RAT>
    </OTHERINFO>
</ROOT>'

我怎樣才能做到這一點? 謝謝

您可以使用.modify()擺脫所有不想保留的節點:

SET @XML='<ROOT>
    <HDR>
        <NBR>21</NBR>
        <DT>2009-08-17</DT>
    </HDR>
    <OTHERINFO>
        <RAT>
          <ASMT_DT>2015-08-10</ASMT_DT>
        </RAT>
        <RAT>
          <ASMT_DT>2014-08-10</ASMT_DT>
          <INDICATOR>1</INDICATOR>
        </RAT>
        <RAT>
          <ASMT_DT>2013-08-10</ASMT_DT>
          <INDICATOR>1</INDICATOR>
        </RAT>
    </OTHERINFO>
</ROOT>';

SET @XML.modify('delete /ROOT/OTHERINFO/RAT[INDICATOR=1]');
SELECT @XML;

另一個-內聯! -方法是FLWOR XQuery

SELECT @XML.query
('  let $hdr:=/ROOT/HDR
    let $oi:=/ROOT/OTHERINFO
    return
    <ROOT>
    {$hdr}
    <OTHERINFO>
    {
        for $r in $oi/RAT[empty(INDICATOR) or INDICATOR/text()!="1"]
        return $r
    }
    </OTHERINFO>
    </ROOT>
');

暫無
暫無

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

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