text字段的替换处理示例--全表替换

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:08:47
--创建数据测试环境 
create   table   test(id   varchar(3),txt   text) 
insert   into   test 
select   '001 ',REPLICATE( 'a ',4000)   +   REPLICATE( 'b ',2000)   +   REPLICATE( 'ab ',2000) 
union   all   select   '002 ',REPLICATE( 'a ',4000)   +   REPLICATE( 'b ',2000)   +   REPLICATE( 'ab ',2000) 
go 
select   datalength(txt),*   from   test 

--定义替换的字符串 
declare   @s_str   varchar(8000),@d_str   varchar(8000) 
select   @s_str= 'a '   --要替换的字符串 
,@d_str= 'ab ' --替换成的字符串 


--因为只能用patindex,所以对于搜索字符串做处理 
set   @s_str= '% '+@s_str+ '% ' 

--定义游标,循环处理数据 
declare   @id   varchar(3) 
declare   #tb   cursor   for   select   id   from   test 
open   #tb 
fetch   next   from   #tb   into   @id 
while   @@fetch_status=0 
begin 
--字符串替换处理 
declare   @p   varbinary(16) 
,@p1   int,@p2   int 
,@rplen   int,@step   int,@len   int 

select   @p=textptr(txt) 
,@rplen=len(@s_str)-2 
,@step=len(@d_str) 
,@p1=patindex(@s_str,txt) 
,@len=datalength(txt) 
,@p2=0 
from   test   where   id=@id 

while   @p1> 0 
begin 
set   @p2=@p1+@p2-1 
updatetext   test.txt   @p   @p2   @rplen   @d_str 
select   @p2=@p2+1,@p1=patindex(@s_str,substring(txt,@p2+1,@len)) 
from   test   where   id=@id 
end 
fetch   next   from   #tb   into   @id 
end 
close   #tb 
deallocate   #tb 

--显示结果 
select   datalength(txt),*   from   test 

go 
--删除数据测试环境 
drop   table   test  原文:http://topic.csdn.net/t/20040703/15/3143025.html