sqlserver 批量修改替换text,ntext类型字段的方法

1.先查询text,ntext类型数据的长度,修改过程中一定注意长度,过长时修改会丢弃多余的数据。

select *  FROM  [dbo].[BoxCount_P_20190307]  datalength([pinfo])>8000

2.数据长度全部小于8000的数据,可使用常规修改方法,把ntext数据转换成 varchar(max)

DECLARE @oldstr VARCHAR(400)
DECLARE @val VARCHAR(400)--替换后的新字符串
set @oldstr = 'http://ohly.jdypf.com'--需要替换的字符串
set @val='http://eoud.dgygpx.com';--替换后的新字符串
update [dbo].[BoxCount_P] set [pinfo]=replace(cast([pinfo] as varchar(8000)) , @oldstr, @val)
where [pinfo] like '%'+@oldstr +'%' and datalength([pinfo])<8000

3.数据长度全部大于8000的数据但数据大小小于2G;可以使用replaces,但要把ntext数据转换成 nvarchar(max)

DECLARE @oldstr VARCHAR(400)
DECLARE @val VARCHAR(400)--替换后的新字符串
set @oldstr = 'http://poik.kxyw123.com'--需要替换的字符串
set @val='http://poik.dgygpx.com';--替换后的新字符串
update [dbo].[BoxCount_P] set [pinfo]=replace(cast([pinfo] as nvarchar(max)) , @oldstr, @val)
where [pinfo] like '%'+@oldstr +'%' 
and datalength([pinfo])<8000

 

4.数据长度有可能大于8000的修改方法(也适合小于8000的数据),不知什么原因部分修改有误???

DECLARE @ptr binary(16)--文本指针
DECLARE @oldstr VARCHAR(400)
declare @dl INT--需要替换的字符串的长度
DECLARE @val VARCHAR(400)--替换后的新字符串
DECLARE @index INT --要插入的 开始位置
set @oldstr = 'http://ohly.jdypf.com'--需要替换的字符串
set @val='http://eoud.dgygpx.com';--替换后的新字符串
set @dl = len(@oldstr)--字符串块长度
DECLARE Updatatext_Datas CURSOR FOR --创建游标
SELECT TEXTPTR([pinfo]),PATINDEX(@oldstr,[pinfo])-1 FROM  dbo.[BoxCount_P_20190307] --表对应修改
WHERE  [pinfo] like  '%'+@o@valldstr+'%'  --查询条件
OPEN Updatatext_Datas; --打开游标
FETCH NEXT FROM Updatatext_Datas  into @ptr,@index  --读取游标数据
WHILE @@FETCH_STATUS=0
BEGIN
UPDATETEXT  [dbo].[BoxCount_P_20190307].[pinfo]  @ptr @index @dl @val --更行ntext类型的数据,表名对用修改
FETCH NEXT FROM Updatatext_Datas into @ptr,@index --读取游标数据
END;
close Updatatext_Datas; --关闭游标
deallocate Updatatext_Datas; --释放游标

 

转载于:https://www.cnblogs.com/AlexLeeLi/p/10488770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值