在MSSQL中更新XML值

时间:2016-08-29 14:27:20

标签: sql-server xml sql-server-2008

替换大型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。

我在那里错过了哪些不会导致它正确更新?

2 个答案:

答案 0 :(得分:1)

replace()不支持通配符。因此,where ... like会找到相关记录,但replace会找到NOTHING,因为它正在寻找文字%

答案 1 :(得分:0)

您可以使用XML modifyexist

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