--联机帮助UPDATETEXT
更新现有 text、ntext 或 image 字段。使用 UPDATETEXT 在适当的位置更改 text、ntext 或 image 列的一部分。使用 WRITETEXT 来更新和替换整个 text、ntext 或 image 字段。
USE pubs
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
GO
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(pr_info) 
   FROM pub_info pr, publishers p
      WHERE p.pub_id = pr.pub_id 
      AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info.pr_info @ptrval 88 1 'b' 
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'
GO

解决方案 »

  1.   

    可以写的详细一些吗?比如我的表名是test,当中有一个content的列我想将列中值为
    aaaa全部替换成bbbb怎么解决?
      

  2.   

    对于你上面的要求,直接使用update 就可以了:
    create table test
    (
    content ntext
    )insert into test values('aaaaa')
    insert into test values('c')
    insert into test values('b')
    insert into test values('aaaa')
    update test set content='bbbb' 
    where content like 'aaaa' 
      

  3.   

    phantomMan的做法我也知道的,
    但是你那个方法只能使 b替代特定位置的
    字符啊,
    如何替代不确定位置?
      

  4.   

    不是,你还是没有明白我的意思因为我的数据库已经存在了,是一个报告内容的数据库,表名是test吧内容我是用content字段存储,类型是ntext的由于我们部门名称更换了,所以我要在数据库里把原来所有为"网络中心"的替换成"计算机信息中心"应该怎么办?
      

  5.   

    不确定位置?? 是希望实现 Replace 的功能吗?update test set content=Replace(cast(Content as varchar(4000)),'aaaa','bbbb')
      

  6.   

    是啊但是cast函数会不会造成我数据丢失呐?
      

  7.   

    SQL 里面没有太好的方法,你可以参考 下面老大回答的这个帖子:http://community.csdn.net/Expert/topic/4172/4172765.xml?temp=.1557581-----------------------------------------------------------------------------------
    --text字段替换处理示例
    --邹建 2005.04(引用请保留此信息)--测试数据
    CREATE TABLE tb(col ntext)
    INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'
    +'220000001,302000004,500200006,700002008,900002120,',800))
    DECLARE @p binary(16)
    SELECT @p=TEXTPTR(col) FROM tb
    UPDATETEXT tb.col @p NULL 0 tb.col @p
    GO--替换处理定义
    DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)
    SELECT @s_str='00'  --要替换的字符串
    ,@r_str='0000'  --替换成该字符串DECLARE @p varbinary(16)
    DECLARE @start int,@s nvarchar(4000),@len int
    DECLARE @s_len int,@step int,@last_repl int,@pos int--替换处理参数设置
    SELECT 
    --用于要判断每次截取数据,最后一个被替换数据位置的处理
    @s_len=LEN(@s_str),--设置每次应该截取的数据的长度,防止REPLACE后数据溢出
    @step=CASE WHEN LEN(@r_str)>LEN(@s_str)
    THEN 4000/LEN(@r_str)*LEN(@s_str)
    ELSE 4000 END--替换处理的开始位置
    SELECT @start=PATINDEX('%'+@s_str+'%',col),
    @p=TEXTPTR(col),
    @s=SUBSTRING(col,@start,@step),
    @len=LEN(@s),
    @last_repl=0
    FROM tb
    WHERE PATINDEX('%'+@s_str+'%',col)>0
    AND TEXTVALID('tb.col',TEXTPTR(col))=1
    WHILE @len>=@s_len
    BEGIN
    --得到最后一个被替换数据的位置
    WHILE CHARINDEX(@s_str,@s,@last_repl)>0
    SET @last_repl=@s_len
    +CHARINDEX(@s_str,@s,@last_repl)--如果需要,更新数据,同时判断下一个取数位置的偏移量
    IF @last_repl=0
    SET @last_repl=@s_len
    ELSE
    BEGIN
    SELECT @last_repl=CASE
    WHEN @len<@last_repl THEN 1
    WHEN @len-@last_repl>=@s_len THEN @s_len 
    ELSE @len-@last_repl+2 END,
    @s=REPLACE(@s,@s_str,@r_str),
    @pos=@start-1
    UPDATETEXT TB.col @p @pos @len @s
    END
    --获取下一个要处理的数据
    SELECT @start=@start+LEN(@s)-@last_repl+1,
    @s=SUBSTRING(col,@start,@step),
    @len=LEN(@s),
    @last_repl=0
    FROM tb
    END
    GO--显示处理结果
    SELECT datalength(col),* FROM tb
    DROP TABLE tb
      

  8.   

    不行啊,
    运行时错误了下面是错误信息---------------------------------------------------------
    服务器: 消息 7102,级别 20,状态 7,行 4
    SQL Server 内部错误。文本管理器无法继续执行当前语句。
    ODBC: 消息 0,级别 16,状态 1
    通讯链接失败
    ODBC: 消息 0,级别 16,状态 1
    通讯链接失败连接中断
    ---------------------------------------------------------
      

  9.   

    直接用update text set ntext='bbbb' where ntext='aaaa'
    这样难道不行吗?
      

  10.   

    是希望实现Replace 的功能可能在不确定位置字段值不一定仅仅是'aaaa'