如何替换sql中ntext类型数据中的某个字符?
发布网友
发布时间:2022-04-21 02:00
我来回答
共3个回答
热心网友
时间:2022-04-11 19:09
很简单么,不是你的ntext字段容量的问题,这种类型的字段可以放2g的数据.
真正的原因是你在插入文章的时候,没有对文章内容中的单引号进行处理,这样导致的结果就是,insert语句中遇到单引号就结束了,所以这条sql语句会出错.
解决的方法是插入数据之前,把文章内容中的单引号替换成两个单引号就可以了,比如:
dim
content
content
=
replace(content,"'","''")
热心网友
时间:2022-04-11 20:27
--替换处理
declare @s_str nvarchar(4000),@r_str nvarchar(4000)
select @s_str='开心' --要替换的字符串
,@r_str='你好' --替换成该字符串
--替换处理
declare @id int,@ptr varbinary(16)
declare @start int,@s nvarchar(4000),@len int
declare @s_str1 nvarchar(4000),@s_len int,@i int,@step int
select @s_str1=reverse(@s_str),@s_len=len(@s_str)
,@step=case when len(@r_str)>len(@s_str)
then 4000/len(@r_str)*len(@s_str)
else 4000 end
declare tb cursor local for
select id,start=charindex(@s_str,[content])-1
from [tb]
where id=2 --替换id=1的记录
and charindex(@s_str,[content])>0
open tb
fetch tb into @id,@start
while @@fetch_status=0
begin
select @ptr=textptr([content])
,@s=substring([content],@start+1,@step)
from [tb]
where id=@id
while len(@s)>=@s_len
begin
select @len=len(@s),@i=charindex(@s_str1,reverse(@s))
if @i>0
begin
select @i=case when @i>=@s_len then @s_len else @i end
,@s=replace(@s,@s_str,@r_str)
updatetext [tb].[content] @ptr @start @len @s
end
else
set @i=@s_len
select @start=@start+len(@s)-@i+1
,@s=substring([content],@start+1,@step)
from [tb]
where id=@id
end
fetch tb into @id,@start
end
close tb
deallocate tb
go