我的 SQL 表中有以下 XML,我想將標記從false修改為true,僅針對 Token 值為“ C ”的CustomSettingValue
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/Flag/text()[.="false"])[1] with "true"')
WHERE testXML.exist('/CustomSettingValues/CustomSettingValue/Token/text()[.="C"]')=1;
SELECT * FROM @tbl
我上面的嘗試運行沒有錯誤,但我根本看不到值的變化。
進一步查看后,我相信我需要添加一些條件才能在 [1] 處找到 Token="C" 而不是對其進行硬編碼,但我無法從語法上弄清楚。
uj5u.com熱心網友回復:
請嘗試以下解決方案。
SQL
DECLARE @tbl TABLE(testXML XML);
INSERT INTO @tbl (testXML) VALUES
(N'<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())[1] with "true"')
SELECT * FROM @tbl;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/313276.html
標籤:sql sql-server 查询语句
