首页 > 数据库 > SQL Server > 正文

MSSQL批量替换Text字符串

2024-08-31 00:49:07
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 但是目前有许多现存系统仍然存在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('%'[email protected]+'%',[info]) from t where [email protected]
        while @position>0
        begin
            set @[email protected]
            updatetext t.[info] @ptr @position @len @strdsc
          select @position=patindex('%'[email protected]+'%',[info]) from t where [email protected]
        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 [email protected]
        select @strtmp = replace(@strtmp,@strsrc,@strdsc)
        update t set [info] = @strtmp where [email protected]
        fetch next from replace_cursor into @id
    end
    close replace_cursor
    deallocate replace_cursor
    go

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


     

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表