转:邹建--对于局部变量,text、ntext 和 image 数据类型无效

本文介绍如何在SQL中处理Text类型的字段,包括增加和替换字符串的具体实现方法。通过实例演示了如何利用textptr()获取字段指针,updatetext进行内容更新,以及patindex定位替换位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://topic.youkuaiyun.com/t/20040627/22/3126726.html

问题 

取值问题!!  
  以及用Text在使用Select   查询   和INSERT   Update解决之道!  
  比喻发通过declare   @content   Text   去Select   @content=content(Text类型)最值呢???寻求Text类型字段的解决之道!!!

 

--text字段增加处理   
    
  
--创建测试表   
  create   table   test(id   varchar(3),detail   text)   
  
insert   into   test   
  
select   '001','A*B'   
    
  
--定义添加的的字符串   
  declare   @s_str   varchar(8000),@postion   int   
  
select   @s_str='*C'   --要添加的字符串   
  ,@postion=null --追加的位置,null   加在尾部,0   加在首部,其他值则加在指定位置   
    
  
--字符串添加处理   
  declare   @p   varbinary(16)   
  
select   @p=textptr(detail)   from   test   where   id='001'   
  
updatetext   test.detail   @p   @postion   0   @s_str   
    
  
--显示处理结果   
  select   *   from   test   
  
go   
    
  
--删除测试表   
  drop   table   test   

 

 

 

--text字段的替换处理示例--全表替换   
    
  
--创建数据测试环境   
  create   table   test(id   varchar(3),txt   text)   
  
insert   into   test   
  
select   '001',REPLICATE('a',4000)   +   REPLICATE('b',2000)   +   REPLICATE('ab',2000)   
  
union   all   select   '002',REPLICATE('a',4000)   +   REPLICATE('b',2000)   +   REPLICATE('ab',2000)   
  
go   
  
select   datalength(txt),*   from   test   
    
  
--定义替换的字符串   
  declare   @s_str   varchar(8000),@d_str   varchar(8000)   
  
select   @s_str='a'   --要替换的字符串   
  ,@d_str='ab' --替换成的字符串   
    
    
  
--因为只能用patindex,所以对于搜索字符串做处理   
  set   @s_str='%'+@s_str+'%'   
    
  
--定义游标,循环处理数据   
  declare   @id   varchar(3)   
  
declare   #tb   cursor   for   select   id   from   test   
  
open   #tb   
  
fetch   next   from   #tb   into   @id   
  
while   @@fetch_status=0   
  
begin   
  
--字符串替换处理   
  declare   @p   varbinary(16)   
  ,
@p1   int,@p2   int   
  ,
@rplen   int,@step   int,@len   int   
    
  
select   @p=textptr(txt)   
  ,
@rplen=len(@s_str)-2   
  ,
@step=len(@d_str)   
  ,
@p1=patindex(@s_str,txt)   
  ,
@len=datalength(txt)   
  ,
@p2=0   
  
from   test   where   id=@id   
    
  
while   @p1>0   
  
begin   
  
set   @p2=@p1+@p2-1   
  
updatetext   test.txt   @p   @p2   @rplen   @d_str   
  
select   @p2=@p2+1,@p1=patindex(@s_str,substring(txt,@p2+1,@len))   
  
from   test   where   id=@id   
  
end   
  
fetch   next   from   #tb   into   @id   
  
end   
  
close   #tb   
  
deallocate   #tb   
    
  
--显示结果   
  select   datalength(txt),*   from   test   
    
  
go   
  
--删除数据测试环境   
  drop   table   test   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值