现在的位置: 首页 > 综合 > 正文

UpdateText 使用

2011年11月21日 ⁄ 综合 ⁄ 共 1739字 ⁄ 字号 评论关闭

 

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

抱歉!评论已关闭.