2012-12-06 37 views
1

我试图按照此论坛找到了例子,但每一次尝试失败 我有3个columnns表:id (int), xml_badm (xml) and idsito (int) 我必须按照指定的记录中更新节点的idsite 这里值是XML数据的子集来更新:赢服务器2008 R2更新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年一年,我试图执行以下查询:

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 
正如我所说的,

没有发生变化:错误在哪里? thanx提前

回答

1

好吧,我解决了这个问题:这是TE正确的查询也与参数

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 

希望这可以帮助 问候 迭戈