0

我尝试了在这个线程上推荐的内容:

我可以在 t-sql 中进行查找/替换吗?

UPDATE xmlTable SET xmlCol = REPLACE( CAST( xmlCol as varchar(max) ), '[search]', '[replace]')

所以我尝试了它,它有时会起作用。例如以下将起作用:

UPDATE TestSET xmlCol = REPLACE( CAST( xmlCol as varchar(max) ), 'Value', 'NewValue')

以下将不起作用:

UPDATE xmlTable SET xmlCol = REPLACE( CAST( xmlCol as varchar(max) ), 'Value', 'New Value')

(new 和 value 之间的空间)

我收到一条错误消息:

消息 9414,级别 16,状态 1,第 1 行 XML 解析:第 1 行,字符 824,等于预期

我不知道该怎么办,有什么想法吗?我正在尝试更新任何具有“值”属性的元素

4

2 回答 2

0

您有一个属性名称或元素名称,它被调用ValueValue作为其名称的一部分。
replace 语句将替换所有出现的 ,Value即使它是 XML 元素名称或属性名称的一部分。
替换将为您留下一个带有空格的属性名称,这是不允许的。因此,当解析器在属性名称中找到空格时,它会抱怨它并想要一个等号。您的无效 XML 可能看起来像这样。<ElementName New Value="2"></ElementName>

于 2013-10-16T07:14:27.963 回答
0

为什么不直接使用带有modify()函数的正确 xml 更新:

update xmlTable set xmlcol.modify('
    replace value of (/View/FunctionList/Function[@Name="VALUE"]/@Name)[1]
    with "New Value"
')

sql fiddle demo

于 2013-10-16T12:57:57.957 回答