1

我试图按照这个论坛中找到的示例进行操作,但每次尝试都失败了我有一个包含 3 个列的表:id (int), xml_badm (xml) and idsito (int) 我必须根据指定值更新记录中的一个节点,idsite 这里是要更新的 xml 数据的子集:

<ROOT>
  <NEP>
    <VALUE>3.9</VALUE>
    <NEP_UNC>0.5</NEP_UNC>
    <NEP_YEAR_START>2009</NEP_YEAR_START>
    <POLICY>
      <VALUE>Public</VALUE>
      <YEAR>2009</YEAR>
    </POLICY>
    <NEP_YEAR_END>2009</NEP_YEAR_END>
    <NEP_METHOD>"Sampling"</NEP_METHOD>
  </NEP>
  <NEP>
    <VALUE>9.263</VALUE>
    <NEP_COMMENT>"Boh?"</NEP_COMMENT>
    <NEP_UNC>0.02</NEP_UNC>
    <NEP_YEAR_START>2010</NEP_YEAR_START>
    <POLICY>
      <VALUE>Private</VALUE>
      <YEAR>2010</YEAR>
    </POLICY>
    <NEP_YEAR_END>2010</NEP_YEAR_END>
    <NEP_METHOD>"Sampling"</NEP_METHOD>
  </NEP>
  <Rs>
    <VALUE>0.63</VALUE>
    <Rs_SIGMA>0</Rs_SIGMA>
    <Rs_UNC>0.23</Rs_UNC>
    <Rs_TS>23</Rs_TS>
    <Rs_SWC>19.12</Rs_SWC>
    <Rs_DATE_START>2010</Rs_DATE_START>
    <POLICY>
      <VALUE>Private</VALUE>
      <YEAR>2010</YEAR>
    </POLICY>
    <Rs_DATE_END>2010</Rs_DATE_END>
  </Rs>
</ROOT>

我想在 2010 年将 POLICY->VALUE 设置为 Public,我尝试执行以下查询:

UPDATE  tcdc.dbo.BADM_Xml 
SET  xml_badm.modify('replace value of (/ROOT/NEP/POLICY/VALUE/text())[1] with   "Public"')
WHERE  xml_badm.value('(/ROOT/NEP/POLICY/YEAR)[1]','varchar(50)') = '2010' and idsito=438

正如我所说,没有发生任何变化:错误在哪里?提前谢谢

4

1 回答 1

1

对,我解决了这个问题:这是一个正确的查询也有参数

DECLARE @var varchar(50)
DECLARE @oldy int

set @oldy=2010
set @var='NEP'

UPDATE [table] 
SET xml_badm.modify('replace value of (/ROOT/*[local-name()=sql:variable("@var")]/POLICY[YEAR=sql:variable("@oldy")]/VALUE/text())[1] with "Private"') 
where idsito=438

希望这可以帮助关于迭戈

于 2012-12-11T08:39:41.740 回答