You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中按条件修改XML字段内指定Flag节点值的问题

问题原因

原有代码的modify方法内的XPath表达式没有限定仅匹配Token值为"C"的CustomSettingValue节点,只会修改整段XML中第一个值为false的Flag节点(也就是Token为B的对应节点),因此看不到Token=C节点的Flag变化。

修正后的完整代码

DECLARE @tbl TABLE(testXML XML)
INSERT INTO @tbl (testXML)
VALUES ('<CustomSettingValues xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                 xmlns="http://ABC.ABC.Interfaces/PInterfaceSettings.xsd">
<CustomSettingValue>
  <Token>A</Token>
  <Display>true</Display>
  <Flag>true</Flag>
  <Required>false</Required>
  <SettingValue>0</SettingValue>
</CustomSettingValue>
<CustomSettingValue>
  <Token>B</Token>
  <Display>true</Display>
  <Flag>false</Flag>
  <Required>false</Required>
</CustomSettingValue>
<CustomSettingValue>
  <Token>C</Token>
  <Display>true</Display>
  <Flag>false</Flag>
  <Required>false</Required>
</CustomSettingValue>
<CustomSettingValue>
  <Token>D</Token>
  <Display>true</Display>
  <Flag>false</Flag>
  <Required>true</Required>
</CustomSettingValue>
</CustomSettingValues>')

;WITH XMLNAMESPACES(DEFAULT 'http://ABC.ABC.Interfaces/PInterfaceSettings.xsd')
UPDATE @tbl
SET testXML.modify('replace value of (/CustomSettingValues/CustomSettingValue[Token/text()="C"]/Flag/text()[.="false"])[1] with "true"')
WHERE testXML.exist('/CustomSettingValues/CustomSettingValue/Token/text()[.="C"]')=1;

SELECT * FROM @tbl

关键修改说明

  • 在XPath路径的CustomSettingValue节点后添加了筛选条件[Token/text()="C"],精准定位到Token值为"C"的配置节点,再修改其下的Flag值
  • 原有WHERE条件可以过滤掉不存在Token="C"配置的行,避免无意义的更新操作,性能更优

内容的提问来源于stack exchange,提问作者Fylix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:15:02