我有一个字段类型为text但我要对他进行replace但sql server对text不支持replace
如果改成varchar则一定不够,要如何解决呢,
---------------------------------------------------------------
最笨的方法,
读出来,写到WORD,通过WORD来替换。
---------------------------------------------------------------
将Text转为字符串,再替换,如
MYTEXT字段为Text型
UPDATE TABLE1
SET MYTEXT = REPLACE(CONVERT(VARCHAR,MYTEXT),'AA','BB')
---------------------------------------------------------------
用readtxt读部分数据块,replace 更改然后updatetxt写回去,
以此做个循环修改的函数。调用一下即可
---------------------------------------------------------------
create table #t(txt text)
insert into #t values('asdfa$$$ljljl$$$1234$$$')
insert into #t values('$$$123$$')
insert into #t values('34$$$as')
go
DECLARE @val varbinary(16)
declare @n int
declare @len int
declare @old varchar(8000)
declare @new varchar(8000)
set @old = '$$$'
set @new = '@@'
set @len = len(@old)
while 1=1
begin
SELECT top 1 @val = TEXTPTR(txt),@n = patindex('%'+@old+'%',txt)-1
from #t
where patindex('%'+@old+'%',txt) > 0
if @@rowcount = 0
break
updatetext #t.txt @val @n @len @new
end
go
select * from #t
--asdfa@@ljljl@@1234@@
--@@123$$
--34@@as
但是,如果将'$$$'转成'$$'则可能会出问题。自己再想想,我没时间了:)
---------------------------------------------------------------
好像可以的啊!
create table #t(txt text)
insert into #t values('asdfa$$$$ljljl$$$$1234$$$$')
insert into #t values('$$$$123$$')
insert into #t values('34$$$$as')
go
DECLARE @val varbinary(16)
declare @n int
declare @len int
declare @old varchar(8000)
declare @new varchar(8000)
set @old = '$$$$'
set @new = '$$'
set @len = len(@old)
while 1=1
begin
SELECT top 1 @val = TEXTPTR(txt),@n = patindex('%'+@old+'%',txt)-1
from #t
where patindex('%'+@old+'%',txt) > 0
if @@rowcount = 0
break
updatetext #t.txt @val @n @len @new
end
go
select * from #t
drop table #t