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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM