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; --釋放游標