首页 > 解决方案 > 使用 SQL 脚本中的新值更新 XML 元素值

问题描述

我在 XYZ 表的一列中有 XML,这里我需要用新值而不是 0.00 更新 Amount 标签,然后是 PolicyReference 和 AccountReference 我需要更新这些标签中的两个不同值而不是 Blank 。例如 -

 <PolicyReference>7657576567</PolicyReference>
                  <AccountReference>7657576875</AccountReference>

这是我在专栏中的 XML:-

<document>
  <StatusCode>ACV</StatusCode>
  <PaymentMethodDetail>
    <EFT>
      <AccountNumber>123456789</AccountNumber>
      <AccountName>ABCDEFGHIJK</AccountName>
    </EFT>
  </PaymentMethodDetail>
  <PaymentExtendedData>
    <CHECK>
      <Source>System</Source>
      <SourceType>ACH</SourceType>
    </CHECK>
  </PaymentExtendedData>
  <PostMarkDate />
  <EntryUserId>1</EntryUserId>
  <Amount>0.00</Amount>
  <EntryDate />
  <PolicyLineOfBusiness>LOL</PolicyLineOfBusiness>
  </PolicyReference>
  </AccountReference>
  <AccountId>2034001793</AccountId>
</document>
     

这是我尝试过的:-

Update XYZ
SET XmlPayload.modify('replace value of (//document/PolicyReference/)[1] with "<PolicyReference>275654</PolicyReference>"')
where PaymentSearchId =18785

我收到一条错误消息,请建议我:- Msg 9341,Level 16,State 1,Line 4 XQuery [XYZ.XmlPayload.modify()]: Syntax error near ')',需要一个步骤表达式。

标签: sql.net

解决方案


应该这样做 - 使用字符串 Replace 来使用字符串,因为您的 XML 不是有效的 XML,并且 XML 功能不适用于它。但是字符串会

UPDATE XYZ
SET XmlPayload = REPLACE(CAST(XmlPayload AS NVARCHAR(MAX)), ' </PolicyReference>', '<PolicyReference>7657576567</PolicyReference>')
WHERE PaymentSearchId =18785

推荐阅读