替换大型XML文本值MSSQL中的XML标记值。
在MSSQL中,我有一个名为form的列,它是一个带有极大XML的文本列。我需要找到某个标签,并将标签中该子标签的值从False更改为True。
这就是我目前所拥有的:
USE trainset;
UPDATE dbo.users
SET formxml = REPLACE(CAST(formxml as nvarchar(max)), '%<ttaycheckbox><name>cbTermsConditions</name><cargo>F</cargo></ttaycheckbox>%', '<ttaycheckbox><name>cbTermsConditions</name><cargo>T</cargo></ttaycheckbox>')
WHERE usersid = '0000GARX'
and formname ='ffOrderRpt'
and formxml LIKE ('%<ttaycheckbox><name>cbTermsConditions</name><cargo>F</cargo></ttaycheckbox>%')
好像正在进行更新; 但是,在此之后,当我对此特定值进行选择时,值仍为False而不是True。
我在那里错过了哪些不会导致它正确更新?
答案 0 :(得分:1)
replace()
不支持通配符。因此,where ... like
会找到相关记录,但replace
会找到NOTHING,因为它正在寻找文字%
。
答案 1 :(得分:0)
UPDATE users
SET formxml.modify('replace value of (/ttaycheckbox/cargo/text())[1] with "T"')
WHERE usersid = '0000GARX'
and formname ='ffOrderRpt'
and formxml.exist('/ttaycheckbox/name[text()[1] eq "cbTermsConditions"]') = 1
and formxml.exist('/ttaycheckbox/cargo[text()[1] eq "F"]') = 1