SQL ntext字段的替换方法
				
									
					
					
						 | 
						
							
							admin 
							
							
								2011年5月4日 15:47
								本文热度 4270
							
							 
						 | 
					
					
				 
				
SQL ntext字段应该如何替换呢?可以通过convert字段转换,把SQL ntext字段转换为varchar(8000),然后用Relpace函数替换,不过,此方法,对于字段长度大于8000的ntext字段无效,下面这种方法正好可以解决这个问题,供您参考。
- CREATE procedure [dbo].[Proc_UpdateNTextField]      
 -      
 - @TargetTable    nvarchar(1000),   --目标表名      
 - @TargetField    nvarchar(1000),   --目标字段名      
 - @PKField        nvarchar(1000),   --该表主键字段名      
 - @otxt    nvarchar(1000),        --需要替换的字符串      
 - @ntxt    nvarchar(1000)         --替换后的字符串      
 -      
 - as     
 - begin      
 -      
 - declare @SqlStr nvarchar(4000)      
 -      
 - set @SqlStr = ' declare @txtlen int '     
 - set @SqlStr = @SqlStr + ' set @txtlen = len(''' + @otxt + ''') '     
 -      
 - set @SqlStr = @SqlStr + ' declare @pos int '     
 - set @SqlStr = @SqlStr + ' set @pos = 0 '     
 -      
 - set @SqlStr = @SqlStr + 'declare    curs    cursor    local    fast_forward   for select   '     
 - set @SqlStr = @SqlStr + @PKField + ' , textptr(' + @TargetField +')   from ' +    @TargetTable   +'     where   '   + @TargetField +  ' like     ''%'    +    @otxt    +'%'''         
 -      
 - set @SqlStr = @SqlStr + ' declare    @ptr    binary(16) '          
 - set @SqlStr = @SqlStr + ' declare    @id    char(32) '         
 -         
 - set @SqlStr = @SqlStr + ' open    curs   '      
 -         
 - set @SqlStr = @SqlStr + ' fetch    next    from    curs    into    @id,    @ptr   '      
 -         
 - set @SqlStr = @SqlStr + ' while    @@fetch_status    =    0   '      
 - set @SqlStr = @SqlStr + ' begin '        
 - set @SqlStr = @SqlStr + ' select @pos= patindex(''%' + @otxt + '%'',ProductDesc) from ProductTemp where ProductID=@id '     
 - set @SqlStr = @SqlStr + ' while @pos>0 '     
 - set @SqlStr = @SqlStr + ' begin '     
 -      
 - set @SqlStr = @SqlStr + ' set @pos=@pos-1 '     
 - set @SqlStr = @SqlStr + ' updatetext ' + @TargetTable + '.' +@TargetField + '    @ptr    @pos    @txtlen    ''' + @ntxt + ''' '     
 - set @SqlStr = @SqlStr + ' select @pos= patindex(''%' + @otxt + '%'',ProductDesc) from ProductTemp where ProductID=@id '     
 -         
 - set @SqlStr = @SqlStr + ' end '     
 -         
 - set @SqlStr = @SqlStr + ' fetch    next    from    curs    into    @id,    @ptr   '      
 -      
 - set @SqlStr = @SqlStr + ' end '        
 -         
 - set @SqlStr = @SqlStr + ' close    curs '        
 - set @SqlStr = @SqlStr + ' deallocate    curs '     
 -      
 - EXECUTE sp_executesql   @SqlStr      
 -      
 - end    
 
 
该文章在 2011/5/4 15:47:46 编辑过