UpdateText 使用

本文介绍了一个用于更新SQL Server中指定表多个文本列的存储过程。该存储过程能够有效地替换文本列中的旧字符串为新字符串,特别适用于处理长度超过8000字符的大文本字段。

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

 

Create proc [dbo].[UpdateTextColumn]

@Table varchar(100),

@Columns varchar(200),--eg:Column1,Column2,

@old varchar(100),

@new varchar(100)

as

    
set nocount on

    
declare @sql nvarchar(2000)

    
declare @Column varchar(50)

    
declare @cpos int,@npos int

    
set @cpos=1;

    
set @npos=1;

    
set @npos=charindex(',',@Columns,@cpos);

    
while(@npos>0)

    
begin

        
set @Column = substring(@Columns,@cpos,@npos-@cpos);

        
set @cpos = @npos+1

        
set @npos=charindex(',',@Columns,@cpos);

        

        
set @sql = 'update '+@Table+' set '+@Column+'=replace(cast('+@Column+' as varchar(8000)),@old,@new) where Datalength('+@Column+')<=8000';

        
EXECUTE sp_executesql @Sql,

                           N
'@old varchar(100),@new varchar(100)',

                           
@old,

                           
@new

        
declare @ptr binary(16) ,@offset int,@dellen int

        

        
set @dellen = len(@old)

        

        
set @offset = 1

        
while @offset>=1

        
begin

            
set @offset = 0

            
set @sql = 'select     top 1 @offset = charindex('''+@old+''' , '+@Column+'), @ptr = textptr('+@Column+') from '+@Table+' where Datalength('+@Column+')>8000 and '+@Column+' like ''%'+@old+'%''';

            
EXEC sp_executesql @Sql,N'@offset int OUTPUT,@ptr binary(16) OUTPUT,@old varchar(100)',

                               
@offset OUTPUT,@ptr OUTPUT,@old;

           
if @offset > 0

            
begin

                
set @offset = @offset-1

                
set @sql='updatetext '+@Table+'.'+@Column+' @ptr @offset @dellen @new';

                
EXEC sp_executesql @Sql,N'@offset int ,@ptr binary(16),@dellen int,@new varchar(100)',@offset,@ptr,@dellen,@new;

            
end 

        
end

end

go

使用方法:exec UpdateTextColumn @tbname,@column,@old,@new

转载于:https://www.cnblogs.com/craig/archive/2008/06/16/1222795.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值