2017-07-11 52 views
1

使用SQL和函數xml.modify是否有在特定節點下添加新節點的功能?使用XML.Modify如何插入節點UNDERNEATH現有節點

這裏是我的XML

<TESTCASESUMMARY> 
    <TESTCASES> 
     <TESTS id="1"> 
      <TEST1>1</TEST1> 
      <TEST2>10</TEST2> 
      <TEST3>10</TEST3> 
      <TEST4>0</TEST4> 
      <TEST5>0.75</TEST5> 
      <TEST6>10</TEST6> 
      <TEST7/> 
      <TEST8>0.05</TEST8> 
      <TEST9>0.05</TEST9> 
      <TEST10>  <TEST11>0.05</TEST11>B</TEST10> 
      <TEST12/>       
      <TEST13/>     
    </TESTCASES>   
</TESTCASESUMMARY> 

我現在有

SET @xml.modify('insert <TEST11>{sql:variable("@TEST11")}</TEST11> as first into 

(TESTCASESUMMARY/TESTCASES/TESTS[sql:variable("@counter")]/TEST10)[1]') 

我需要下試10,而不是在同一水平上得到測試11

謝謝

回答

0

我希望我得到這個正確的...

您可以使用after來指定一個節點,您要在其中直接放置新節點。但這個節點必須存在......

DECLARE @xml XML= 
N'<TESTCASESUMMARY> 
    <TESTCASES> 
     <TESTS id="1"> 
      <TEST1>1</TEST1> 
      <!-- more nodes --> 
      <TEST10>B</TEST10> 
      <TEST12/>       
      <TEST13/> 
     </TESTS>     
    </TESTCASES>   
</TESTCASESUMMARY>'; 

DECLARE @Value11 VARCHAR(100)='0.05'; 
DECLARE @counter INT=1; 

SET @xml.modify(N'insert <TEST11>{sql:variable("@Value11")}</TEST11> 
        after 
        (/TESTCASESUMMARY/TESTCASES/TESTS[sql:variable("@counter")]/TEST10)[1]'); 

SELECT @xml; 

結果

<TESTCASESUMMARY> 
    <TESTCASES> 
    <TESTS id="1"> 
     <TEST1>1</TEST1> 
     <!-- more nodes --> 
     <TEST10>B</TEST10> 
     <TEST11>0.05</TEST11> 
     <TEST12 /> 
     <TEST13 /> 
    </TESTS> 
    </TESTCASES> 
</TESTCASESUMMARY> 
相關問題