Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中更新特定的XML属性?_Sql_Sql Server_Xml_Sql Server 2008_Tsql - Fatal编程技术网

如何在SQL Server中更新特定的XML属性?

如何在SQL Server中更新特定的XML属性?,sql,sql-server,xml,sql-server-2008,tsql,Sql,Sql Server,Xml,Sql Server 2008,Tsql,我们将在SQLServer2008R2中存储所有不同成本的XML文档。现在,某些价格需要根据公式进行更新 一种方法是: 分解XML并访问值 计算 现在重建XML结构 这是唯一的办法吗?或者有没有一种更简单的方法可以让我们动态地访问这些值并一次更新整个XML?对于这种情况,最好的方法是什么 以下是XML的示例: <ItemAttributeData> <Section ID="469919" TypeID="61000002"> <Attributes>

我们将在SQLServer2008R2中存储所有不同成本的XML文档。现在,某些价格需要根据公式进行更新

一种方法是:

  • 分解XML并访问值
  • 计算
  • 现在重建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>
    
    
    
    您可以使用非标准。像

    DECLARE@mydocxml
    设置@myDoc=
    此处描述了手动步骤。
    此工作中心的制造步骤1
    此工作中心的制造步骤2
    '
    --选择@myDoc
    SET@myDoc.modify('
    替换(/Root/Location[1]/@LaborHours)[1]的值
    与(
    如果(计数(/Root/Location[1]/step)>3),则
    "3.0"
    其他的
    "1.0"
    )
    ')
    选择@myDoc
    
    这段XML是否存储在SQL Server中的XML数据类型列中?@Stoleg:是的,它是存储在SQL Server中的XML类型列
    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