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