1.先查询text,ntext类型数据的长度
select * FROM .[dbo].[BoxCount_P_20190307] datalength([pinfo])>8000
2.数据长度全部小于8000的数据,可使用常规修改方法
DECLARE @oldstr VARCHAR(400) DECLARE @val VARCHAR(400)--替换后的新字符串 set @oldstr = ‘http://ohly.jdypf.com‘--需要替换的字符串 set @val=‘http://eoud.dgygpx.com‘;--替换后的新字符串 update [tongji.ggstats].[dbo].[BoxCount_P] set [pinfo]=replace(cast([pinfo] as varchar(8000)) , @oldstr, @val) where [pinfo] like ‘%‘+@oldstr +‘%‘ and datalength([pinfo])<8000
3.数据长度有可能大于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]),CHARINDEX(@oldstr,[pinfo])-1 FROM dbo.[BoxCount_P_20190307] WHERE [pinfo] like ‘%‘+@o@valldstr+‘%‘ --查询条件 OPEN Updatatext_Datas; --打开游标 FETCH NEXT FROM Updatatext_Datas into @ptr,@val,@index --读取游标数据 WHILE @@FETCH_STATUS=0 BEGIN UPDATETEXT dbo.[BoxCount_P_20190307].[pinfo] @ptr @index @dl @val --更行ntext类型的数据 FETCH NEXT FROM Updatatext_Datas into @ptr,@val,@index --读取游标数据 END; close Updatatext_Datas; --关闭游标 deallocate Updatatext_Datas; --释放游标
sqlserver修改替换text,ntext类型字段的方法
原文:https://www.cnblogs.com/AlexLeeLi/p/10488770.html