[英]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.