SQL Server xml修改插入方法条件插入

时间:2015-03-30 10:50:23

标签: sql-server xml tsql insert conditional

我有这个xml,我想为变量中指定的<TICKED>插入<DISABLED>节点和/COUNTRY/DisplayValue节点,但仅当<TICKED>节点没有已经存在了。

DECLARE @xml AS XML;

SET @xml = '
      <COUNTRY TICKOPTION="Y">
        <DisplayValue>IRELAND</DisplayValue>
        <ReportValue>[Hierarchy].[CIMSHierarchy].[Country Name].&amp;[IRELAND]</ReportValue>
        <TICKED>Y</TICKED>
      </COUNTRY>
      <COUNTRY TICKOPTION="Y">
        <DisplayValue>CANADA</DisplayValue>
        <ReportValue>[Hierarchy].[CIMSHierarchy].[Country Name].&amp;[CANADA]</ReportValue>
        <TICKED>Y</TICKED> 
      </COUNTRY>      
      <COUNTRY TICKOPTION="Y">
        <DisplayValue>INDIA</DisplayValue>
        <ReportValue>[Hierarchy].[CIMSHierarchy].[Country Name].&amp;[INDIA]</ReportValue>
        <TICKED>Y</TICKED> 
      </COUNTRY>'

DECLARE @HC_Country_DV AS VARCHAR(255);

SET @HC_Country_DV = 'CANADA'

SET @xml.modify('
insert (<TICKED>Y</TICKED>,<DISABLED>Y</DISABLED>) 
into (/COUNTRY[DisplayValue = sql:variable("@HC_Country_DV")])[1]')

SELECT @xml 

当我这样做时,我会得到<TICKED>

的两个条目
<COUNTRY TICKOPTION="Y">
  <DisplayValue>IRELAND</DisplayValue>
  <ReportValue>[Hierarchy].[CIMSHierarchy].[Country Name].&amp;[IRELAND]</ReportValue>
  <TICKED>Y</TICKED>
</COUNTRY>
<COUNTRY TICKOPTION="Y">
  <DisplayValue>CANADA</DisplayValue>
  <ReportValue>[Hierarchy].[CIMSHierarchy].[Country Name].&amp;[CANADA]</ReportValue>
  <TICKED>Y</TICKED>
  <TICKED>Y</TICKED>
  <DISABLED>Y</DISABLED>
</COUNTRY>
<COUNTRY TICKOPTION="Y">
  <DisplayValue>INDIA</DisplayValue>
  <ReportValue>[Hierarchy].[CIMSHierarchy].[Country Name].&amp;[INDIA]</ReportValue>
  <TICKED>Y</TICKED>
</COUNTRY> 

我无法弄清楚如何仅插入<TICKED>节点一次,我在修改中使用“if”条件但无法弄明白。我考虑过“删除”修改方法删除一个,但我会在这里问,看看你们是否可以再次帮助我......

1 个答案:

答案 0 :(得分:2)

  

但仅限于<TICKED>节点尚不存在。

添加对TICKED节点的检查。 and not(TICKED)

SET @xml.modify('
insert (<TICKED>Y</TICKED>,<DISABLED>Y</DISABLED>) 
into (/COUNTRY[DisplayValue = sql:variable("@HC_Country_DV") and not(TICKED)])[1]')