一、问题描述: 1。在Sql Server 中,ntext/text/image 字段不允许应用replace函数替换内容; 2。通过convert字段转换,可以把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