这是针对SQL Server 2000的,我无法更改:(
我在搜索字符串时遇到一些问题
&
并替换为
&&
我定位到文本字段(未全文索引)
我尝试过
UPDATE documents
SET doc_xml = REPLACE(doc_xml, '&' , '&&')
但是这不起作用,因为我必须转义&char。我尝试过
ESCAPE '\'
最后,但没有运气。
示例目标内容如下:
<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>
我只希望替换单个
&
在最后两行中,我需要获得的结果是这一行:
<FOLDER_Name>Buy&&Go</FOLDER_Name>
<Product_Name>Buy && Go</Product_Name>
<SKU_Name>Buy && Go</SKU_Name>
<COMPANY_Name>AT&&T</COMPANY_Name>
我必须保留原始内容中的空格,也不要修改已经具有双“&”号的字符串
&&
答案 0 :(得分:2)
一种方法是将替换两次,而第二种修复四边形值。
declare @table table (x xml)
insert into @table
values(
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>')
update @table
set x = convert(xml,
replace(
replace(convert(varchar(max),x),'&','&&'),'&&&&','&&'
)
)
select * from @table
如果这不是xml
列,则:
declare @table table (x varchar(max))
insert into @table
values(
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>')
update @table
set x = replace(
replace(x,'&','&&'),'&&&&','&&'
)
select * from @table
因此您的代码将类似于:
UPDATE documents
SET doc_xml =
convert(xml,
replace(
replace(convert(varchar(max),x),'&','&&'),'&&&&','&&'
)
)
答案 1 :(得分:1)
也许这可以在SQL2000上使用:
UPDATE documents
SET doc_xml =
REPLACE(
REPLACE(
REPLACE(CAST(doc_xml as varchar(8000))
,'&&', '&&'
)
,'&', '&&'
)
,'&&', '&&'
)
您可以尝试使用SSMS:
DECLARE @doc_xml varchar(4000)
SET @doc_xml =
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>'
PRINT
REPLACE(
REPLACE(
REPLACE(@doc_xml
,'&&', '&&'
)
,'&', '&&'
)
,'&&', '&&'
)