MSSQL批量替换Text字符串

80酷酷网    80kuku.com

  字符串

但是目前有许多现存系统仍然存在text类型的字段,因为种种原因已经不能修改数据库结构。
但是我们可以在新写的sql语句及存储过程中采用新的方法,以备将来mssql server抛弃专门针对text等类型的操作函数后修改程序的麻烦。
下面是一个简单的替换例子,

针对text类型的字符串替换:

设有表 T(id int not null,info text)
要求替换info中的'abc'为'123'
一般的存储过程会写成:
drop procedure dbo.procedure_1
go
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
create procedure dbo.procedure_1
as
declare ptr varbinary(16)
declare ID int
declare Position int,len int
declare strsrc char(3)
declare strdsc char(3)
set strtmp='abc'
set strdsc='123'
set len=3
declare replace_Cursor scroll Cursor
for
select textptr([info]),id from T
for read only
open replace_Cursor
fetch next from replace_Cursor into ptr,ID
while fetch_status=0
begin
    select Position=patindex('%'+strsrc+'%',[info]) from T where id=ID
    while Position>0
    begin
        set Position=Position-1
        updatetext T.[info] ptr Position len strdsc
      select Position=patindex('%'+strsrc+'%',[info]) from T where id=ID
    end
    fetch next from replace_Cursor into ptr,ID
end
close replace_Cursor
deallocate replace_Cursor
go

其中用到了text专用的函数 updatetext

现在我们改写成
drop procedure dbo.procedure_1
go

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

create procedure dbo.procedure_1
as

declare ID int
declare strtmp varchar(max)
declare strsrc char(3),strdsc char(3)
set strsrc = 'abc'
set strdsc = '123'
declare replace_Cursor scroll Cursor
for
select id from testtable
--for read only
open replace_Cursor
fetch next from replace_Cursor into ID
while fetch_status=0
begin
    select strtmp = [info] from testtable where id=ID
    select strtmp = Replace(strtmp,strsrc,strdsc)
    update T set [info] = strtmp where id=ID
    fetch next from replace_Cursor into ID
end
close replace_Cursor
deallocate replace_Cursor
go

这样,无论info字段改成char,nchar,text都好,一样均可通用


 



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: