【发布时间】:2016-08-29 14:27:19
【问题描述】:
在大型 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。
我缺少什么导致它无法正确更新?
【问题讨论】:
-
在几乎所有情况下,将现有 XML 转换为字符串类型、在此处修改并将其转换回来都是一种糟糕的方法。这可能会产生副作用(例如吞下
CDATA部分)。如果可能,您应该使用 real XML 方法,在本例中为.modify()。
标签: sql-server xml sql-server-2008