sql语句中的replace实战

时间:2022-10-02 00:47:24
今天去部署研会网站服务器遇到一个问题,用eWebEdit组件发布的新闻内容怎么改数据库中的图片路径都不能正常显示,回来后用sql客户端登录后查了一下原来是在内容字段里记录了图片的存放路径,前台显示是从内容中读取的。所以要改的话就要改内容字段,由于新闻很多,内容也都是text类型的字段,所以不可能一条条的找,上网查了一下sql语句中的replace函数,不行,说是text类型的字段不能直接用replace,有上网查了一下解决方法,其中有说到只要把text型的转化为varchar(8000)就行了。试了一下果然奏效。用的语句是:update [NewsData] set D_Content=replace(cast(D_Content as varchar(8000)),'/xyh/','/')+where语句,不过其中可能有个问题,就是如果text字段的长度超过8000的话后面的内容是不是就不能替换了呢。不过有个方法肯定可以,就是麻烦点,有时间可以试试,
方法如下(转):
**********************************************************************
支持text字段处理的仅有:  
  下面的函数和语句可以与   ntext、text   或   image   数据一起使用。  
  函数                     语句    
  DATALENGTH         READTEXT    
  PATINDEX             SET   TEXTSIZE    
  SUBSTRING           UPDATETEXT    
  TEXTPTR               WRITETEXT    
  TEXTVALID    
   
  主题:text字段  
  1:替换  
   
  --创建数据测试环境  
  create   table   #tb(aa   text)  
  insert   into   #tb   select   'abc123abc123,asd'  
   
  --定义替换的字符串  
  declare   @s_str   varchar(8000),@d_str   varchar(8000)  
  select   @s_str='123'   --要替换的字符串  
  ,@d_str='000' --替换成的字符串  
   
  --字符串替换处理  
  declare   @p   varbinary(16),@postion   int,@rplen   int  
  select   @p=textptr(aa),@rplen=len(@s_str),@postion=charindex(@s_str,aa)-1   from   #tb  
  while   @postion>0  
  begin  
  updatetext   #tb.aa   @p   @postion   @rplen   @d_str  
  select   @postion=charindex(@s_str,aa)-1   from   #tb  
  end  
   
  --显示结果  
  select   *   from   #tb  
   
  --删除数据测试环境  
  drop   table   #tb  
   
  /****************全部替换************************/  
  DECLARE   @ptrval   binary(16)  
  SELECT   @ptrval   =   TEXTPTR(aa)     FROM     #tb     WHERE   aa   like   '%数据2%'  
  if   @ptrval   is   not   null                 --   一定要加上此句,否则若找不到数据下一句就会报错  
  UPDATETEXT   #tb.aa   @ptrval   0   null   '数据3'  
   
  /****************在字段尾添加**********************************/  
  --定义添加的的字符串  
  declare   @s_str   varchar(8000)  
  select   @s_str='*C'   --要添加的字符串  
  --字符串添加处理  
  declare   @p   varbinary(16),@postion   int,@rplen   int  
  select   @p=textptr(detail)   from   test   where   id='001'  
  updatetext   test.detail   @p   null   null   @s_str  
   
  总结:  
  1:Text字段类型不能直接用replace函数来替换,必须用updatetext  
  2:字段比较不能用 where   字段   =   ‘某数据’,可以用like来代替  
  3:updatetext时,若@ptrval值为空会出错,需注意。  
*****************************************************************