--创建测试数据
create table t(id int,var1 text)
insert into t select 1,'asdfasdfasdf<xxx>,s,fasdf(xxx),<xxx>a<xxx>a<xxx>asf'--执行更新操作
declare @str1 varchar(100),@str2 varchar(100)
declare @i int,@len int
declare @ptrval binary(16)
set @str1='<xxx>'
set @str2='<yyyy>'
set @len=len(@str1)SELECT @i = patindex('%'+@str1+'%',var1)-1 from t WHERE id = 1while @i > 0
begin
    SELECT @ptrval = TEXTPTR(var1) FROM t WHERE id = 1
    UPDATETEXT t.var1 @ptrval @i @len @str2 
    SELECT @i = patindex('%'+@str1+'%',var1)-1 from t WHERE id = 1
end
GO--查看更新结果
select * from t
/*
id  var1
--  ------------------------------------------------------------------
1   asdfasdfasdf<yyyy>,s,fasdf(xxx),<yyyy>a<yyyy>a<yyyy>asf
*/
--删除测试数据
drop table t
go

解决方案 »

  1.   

    BTW:当text列的数据长度小于8000字节时,可以直接使用replace()函数执行替换操作。
      

  2.   

    SqlServer帮助,输入"text 数据类型"
    出来这个:修改 ntext、text 或 image 值
    可通过下列方式修改 ntext、text 或 image 值: 使用数据库 API(例如 ADO、OLE DB 或 ODBC)执行 UPDATE 或 INSERT 语句,并将程序变量与 ntext、text 或 image 列的参数标记绑定。然后调用相应的数据库 API 函数,逐块向数据库发送长数据。DB-Library 支持与其 text 和 image 函数相同的功能。
    使用 WRITETEXT 语句重写该列的整个数据值。 
    例如,以下查询将更改 New Moon Books 中 pr_info 列的内容:USE pubs
    sp_dboption 'pubs', 'select into/bulkcopy', 'true'
    DECLARE @ptrval varbinary(16)
    SELECT @ptrval = TEXTPTR(pr_info) 
    FROM pub_info pr INNER JOIN publishers p
        ON p.pub_id = pr.pub_id 
        AND p.pub_name = 'New Moon Books'
    WRITETEXT pub_info.pr_info @ptrval 'New Moon Books (NMB) '
    sp_dboption 'pubs', 'select into/bulkcopy', 'true'使用 UPDATETEXT 语句更新 ntext、text 或 image 列的特定数据块。 
    例如,以下查询用字母 z 取代 New Moon Books 中 text 列的第 88 个字符(Moon 中的第二个字母 o):USE pubs
    sp_dboption 'pubs', 'select into/bulkcopy', 'true'
    DECLARE @ptrval varbinary(16)
    SELECT @ptrval = TEXTPTR(pr_info) 
        FROM pub_info pr INNER JOIN publishers p
            ON p.pub_id = pr.pub_id 
            AND p.pub_name = 'New Moon Books'
    UPDATETEXT pub_info.pr_info @ptrval 88 1 'z' 
    sp_dboption 'pubs', 'select into/bulkcopy', 'false'