使用XML.Modify如何在现有节点下插入节点UNDERNEATH

时间:2017-07-11 16:02:49

标签: sql-server xml xpath xquery xml-dml

使用SQL和函数xml.modify无论如何都要在特定节点下添加新节点?

这是我的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而不是在同一级别

谢谢

1 个答案:

答案 0 :(得分: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>