sql - 使用 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 ')',需要一个步骤表达式。
解决方案
应该这样做 - 使用字符串 Replace 来使用字符串,因为您的 XML 不是有效的 XML,并且 XML 功能不适用于它。但是字符串会
UPDATE XYZ
SET XmlPayload = REPLACE(CAST(XmlPayload AS NVARCHAR(MAX)), ' </PolicyReference>', '<PolicyReference>7657576567</PolicyReference>')
WHERE PaymentSearchId =18785
推荐阅读
- jenkins - Jenkins / Groovy - 字符串插值省略了 shell 命令的某些部分
- terraform - Terraform 升级到 0.14.0/azurerm 到 2.65.0 导致有关应用程序网关配置中 SSL 证书的问题
- apache-kafka-connect - 如何修复 msk 连接器胶水注册表超时错误?
- azure - 通过 GCP、AWS 和 Azure 中的 API 探索 Web 资源
- typescript - 如何从 TS 中的库中扩展类型?
- c# - 在 UWP C# 中的 System.Net.Http 中发送 JSON 的原始列表
- jqgrid - 使用页面上默认数字字段中的值更新 JQGrid 单元格
- apache-spark - 保存到 csv 后 Pyspark 时间戳格式更改
- vue.js - Vue的v-html不支持promise等,vue绑定值全部不支持promise,有解决办法吗?
- php - PHP Regex 创建类似液体标签的东西