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>

POLICY->VALUE を YEAR 2010 の 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 に答える