sqlserver中text/ntext字段内容替换方法总结(sql2885及以上建议当text列的数据长度小于8888字节时,可以直接使用replace()函数执行替换操作。
函数语句
selectfromt
就是将text字段里面的所有如“<xxx>”替换为“<yyy>”,这个在sqlserver里操作起来好像很麻烦,请帮手,谢先!
orderbycrdate
textptrwritetext
declare@lenint
go
/
方法二:
begin
set@len=len(@des)
from表名
execsp_renametbl.newcol,col,column
deallocaterefresh_cursor
go
declare@iint,@lenint
--查看更新成果
--定义替换的字符串
begin
declare@str1varchar(188),@str2varchar(188)
declare@ptrvalbinary(16)
into@vname
updatetextt.var1@ptrval@i@len@str2
begin
updatetblsetnewcol=col
declare@posint
go
set@count=@count+1
主题:text字段
datalengthreadtext
select@s_str=123--要替换的字符串
fetchnextfromrefresh_cursor
declare@desnvarchar(4888)
以下提供一个修改ntext列的例子:
while@@fetch_status<>-1
--删除测试数据
fetchnextfromrefresh_cursor
select@ptrval=textptr(var1)fromtwhereid=1
sql中replace替换ntext,text字段部门内容使用说明:replace(cast(fieldaasvarchar(8888)),aa,bb)
方法一(保举):
while@postion>8
set@des=<requested_amount+1>--要替换成的值
altertabletbladdnewcolntextnull
代码--创建测试数据
(2)如果text/ntext超过8888/4888,看如下例子
declare@ptrvalbinary(16)
--字符串替换处置
update表名
selectnamefromsysobjectswherextype=v
select@ptrval=textptr(字段名)
,@d_str=888--替换成的字符串
end
如安在sqlserver中实现text字段的特定字符串替换
end
break;
update表名
end
--------------------------------------------------------------------
insertinto#tbselectabc123abc123,asd
closerefresh_cursor
from表名
forreadonly
--创建数据测试环境
set@str1=<xxx>
while1=1
go
2.altercolumn语句有局限性,比如不允许修改text、image、ntext或timestamp列.
select@pos=patindex(%+@des+%,propxmldata)-1
/
if@pos>=8
select@i=patindex(%+@str1+%,var1)-1fromtwhereid=1
createtable#tb(aatext)
csdn提问:
where条件
altertabletbldropcolumnoldcol
texsqlserver中text/ntext字段内容替换方法总结(sql2885及以上建议使用varch2010年6月24日 星期四tvalid
declare@s_strvarchar(8888),@d_strvarchar(8888)
go
set@str=<requested_amount>--要替换的字符
updatetablenamesetfielda=replace(cast(fieldaasvarchar(8888)),aa,bb)这样的语句。
1:替换
set@count=8--统计次数.
别的可以也可以通过一下存储过程进行刷新所有视图:
setntext类型字段名=replace(convert(nvarchar(4888),ntext类型字段名),要替换的字符,替换成的值)
--执行更新操作
go
begin
declare@vnamesysname
execsp_refreshview@vname
select@postion=charindex(@s_str,aa)-1from#tb
select@count
print视图+@vname+refreshed
declarerefresh_cursorcursorfor
go
end
droptablet
别的文章:
patindexsettextsize
substringupdatetext
updatetext#tb.aa@p@postion@rplen@d_str
declare@pvarbinary(16),@postionint,@rplenint
declare@countint
set@len=len(@str1)
into@vname
begin
撑持text字段处置的仅有:下面的函数和语句可以与ntext、text或image数据一起使用。
execsp_renametbl.col,oldcol,column
idvar1
createtablet(idint,var1text)
(1)varchar和nvarchar类型是撑持replace,所以如果你的text/ntext不超过8888/4888可以先转换成前面两种类型再使用replace。
updatetext表名.字段名@ptrval@pos@len@str
1asdfasdfasdf<yyyy>,s,fasdf(xxx),<yyyy>a<yyyy>a<yyyy>asf
declare@strnvarchar(4888)
以上通过新增一列替换旧的列方法实现了将一个不允许为空的ntext修改为允许为空的ntext列(注意:以上的go不能缺少).修改表布局之后,由于视图所依赖的基础对象的更改,视图的持久元数据会过期,需要刷新视图,通过sp_refreshview(可以通过sp_depends找处相关的视图,再通过sp_refreshview逐个刷新).
insertintotselect1,asdfasdfasdf<xxx>,s,fasdf(xxx),<xxx>a<xxx>a<xxx>asf
where条件
代码1.updatentext:
else
set@str2=<yyyy>
end
select@p=textptr(aa),@rplen=len(@s_str),@postion=charindex(@s_str,aa)-1from#tb
printrefreshingallviews
while@i>8
settext类型字段名=replace(convert(varchar(8888),text类型字段名),要替换的字符,替换成的值)
select@i=patindex(%+@str1+%,var1)-1fromtwhereid=1
openrefresh_cursor
|
|