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

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

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

转:http://topic.csdn.net/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、付费专栏及课程。

余额充值