2013-06-25 33 views
1

我們在SQL Server 2008 R2中存儲了所有不同成本的XML文檔。現在,某些價格需要根據公式進行更新。如何更新SQL Server中的特定XML屬性?

的方法之一,這將是:

  1. XML分解並訪問值。
  2. 做計算
  3. 現在重建XML結構。

這是唯一的方法嗎?還是有更簡單的方法,我們可以隨時訪問這些值並一次更新整個XML?對於這種情況,最好的方法是什麼?

這裏是XML的示例:

<ItemAttributeData> 
<Section ID="469919" TypeID="61000002"> 
    <Attributes> 
    <Attribute ID="3870" UniqueID="1c71212b-8395-4b43-a44d-9a63374c8c99" VALUE="2" /> 
    <Attribute ID="3569" UniqueID="c0b754d3-e03e-4d4a-9bc1-dcb11c04535b" VALUE="2" /> 
    <Attribute ID="1592" UniqueID="2609b344-88b2-44d6-be20-07b634705c30" VALUE="2" /> 
    </Attributes> 
    </Section> 
<Section ID="469920" TypeID="61000001"> 
    <Attributes> 
    <Attribute ID="3702" UniqueID="7cabf9e8-4f60-4e1e-afe5-75b153e8c5eb" VALUE="1000001649" /> 
    <Attribute ID="3870" UniqueID="595f8e2c-bccb-4fcb-81d4-303fcb7d44c4" VALUE="2" /> 
    <Attribute ID="3868" UniqueID="2226f6c6-380a-4195-98f7-c6deec84e4e8" VALUE="2" /> 
    <Attribute ID="3754" UniqueID="bf936c3f-fa96-49b9-8a62-46fb7e0009d5" VALUE="1000001600" /> 
    <Attribute ID="2204" UniqueID="bdc78784-86ad-4567-bc06-40896d603eaf" VALUE="1" /> 
    <Attribute ID="3874" UniqueID="8728249f-5e60-4938-a60d-208426fe11c8" VALUE="1" /> 
    </Attributes> 
    </Section> 
    <Section ID="469921" TypeID="61000001" /> 
</ItemAttributeData> 
+0

這個XML塊是否存儲在SQL Server中的數據類型XML列中? – Stoleg

+0

@Stoleg:是的,它是一個存儲在SQL Server中的XML類型的列 – user1176058

回答

2

您可以使用非標準XML update command replace value of。像

DECLARE @myDoc xml 
SET @myDoc = '<Root> 
<Location LocationID="10" 
      LaborHours=".1" 
      MachineHours=".2" >Manu steps are described here. 
<step>Manufacturing step 1 at this work center</step> 
<step>Manufacturing step 2 at this work center</step> 
</Location> 
</Root>' 
--SELECT @myDoc 

SET @myDoc.modify(' 
    replace value of (/Root/Location[1]/@LaborHours)[1] 
    with (
     if (count(/Root/Location[1]/step) > 3) then 
     "3.0" 
     else 
      "1.0" 
    ) 
') 
SELECT @myDoc