SQL Server XML替换值

时间:2015-02-19 22:41:26

标签: sql-server xml

XML noobie here - 尝试快速加速SQL Server 2008中现有XML列的一次性,即时数据更新。我已经起草了以下测试代码以找出正确的语法:

DECLARE @XMLData XML
SET @XMLData = '
<Parts>
  <Part>
    <ID>(548753,10300)</ID>
    <PartID>(1030,12014)</PartID>
    <CalculatedQuantity>233</CalculatedQuantity>
    <CalculatedCost>11.65</CalculatedCost>
  </Part>
  <Part>
    <ID>(548752,10300)</ID>
    <PartID>(1001,12014)</PartID>
    <CalculatedQuantity>0.25</CalculatedQuantity>
    <CalculatedCost>5</CalculatedCost>
  </Part>
  <Part>
    <ID>(548751,10300)</ID>
    <PartID>(1842,12014)</PartID>
    <CalculatedQuantity>0.25</CalculatedQuantity>
    <CalculatedCost>15</CalculatedCost>
  </Part>
  <Part>
    <ID>(548750,10300)</ID>
    <PartID>(1929,12014)</PartID>
    <CalculatedQuantity>47.86</CalculatedQuantity>
    <CalculatedCost>27.2271577192</CalculatedCost>
  </Part>
  <Part>
    <ID>(548749,10300)</ID>
    <PartID>(1973,12014)</PartID>
    <CalculatedQuantity>0.3</CalculatedQuantity>
    <CalculatedCost>2.829</CalculatedCost>
  </Part>
</Parts>
'
SET @XMLData.modify ('
    replace value of 
        (/Parts/Part[@PartID = "(1929,12014)"]/CalculatedQuantity/text())[1]

  with "6.5" ');

如果我离得太远以至于它甚至都不明显,我试图仅在PartID = som值的节点中更新CalculatedQuantity的值。然而,显然我遇到了一些错误 - 当我执行此操作时没有任何变化 - 我无法找到一个很好的例子来弄清楚是什么。最终@PartID将等于sql:column以及更新量。但是现在我只想让基本语法有效。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

你非常接近 - 事实上,你只有一个角色。 @PartID匹配名为&#34; PartID&#34;的属性,而不是元素。它应该是这样的:

SET @XMLData.modify ('
    replace value of (/Parts/Part[PartID = "(1929,12014)"]/CalculatedQuantity/text())[1]
    with "6.5"
');