十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
沒辦法,不可能一個庫一下全換了,沒那樣的操作。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了江華免費建站歡迎大家使用!
但你可以這樣操作。
1 檢查每張表的每個字段,查每個字符型的,字段,是否有可能有要修改的數(shù)據(jù)。這個的手工一個一個的確定下來。
2 update 表名 set 字段1 = replace (字段1,'原網(wǎng)址','新網(wǎng)址' ) .
這樣一個一個的替的話,也快,
REPLACE
用第三個表達(dá)式替換第一個字符串表達(dá)式中出現(xiàn)的所有第二個給定字符串表達(dá)式。
語法
REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )
參數(shù)
'string_expression1'
待搜索的字符串表達(dá)式。string_expression1 可以是字符數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。
'string_expression2'
待查找的字符串表達(dá)式。string_expression2 可以是字符數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。
'string_expression3'
替換用的字符串表達(dá)式。string_expression3 可以是字符數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。
返回類型
如果 string_expression(1、2 或 3)是支持的字符數(shù)據(jù)類型之一,則返回字符數(shù)據(jù)。如果 string_expression(1、2 或 3)是支持的 binary 數(shù)據(jù)類型之一,則返回二進(jìn)制數(shù)據(jù)。
示例
下例用 xxx 替換 abcdefghi 中的字符串 cde。
SELECT REPLACE('abcdefghicde','cde','xxx')
GO
下面是結(jié)果集:
------------
abxxxfghixxx
(1 row(s) affected)
如果保險一點的話最好加一個條件限制,就是where name like '%武漢生物',這樣替換的都是以“武漢生物”結(jié)尾的行
在告訴大家如何替換數(shù)據(jù)內(nèi)容之前,我建議大家先了解一下SQL Server數(shù)據(jù)庫的數(shù)據(jù)存儲類型:在使用iwms系統(tǒng)的過程中,我們會經(jīng)常遇到數(shù)據(jù)內(nèi)容的替換操作。在告訴大家如何替換數(shù)據(jù)內(nèi)容之前,我建議大家先了解一下SQLServer數(shù)據(jù)庫的數(shù)據(jù)存儲類型:SQLServer數(shù)據(jù)類型:以上是數(shù)據(jù)庫的基礎(chǔ)知識,是做網(wǎng)站的朋友都應(yīng)該知道的內(nèi)容(無論你使用什么cms),所以建議大家都耐心看一下。數(shù)據(jù)替換一般都發(fā)生在字符串?dāng)?shù)據(jù)字段中,除了ntext類型字段以外的其他字符串?dāng)?shù)據(jù)字段都可以使用以下的sql語句進(jìn)行替換:update [swf_Upload] set [Dir] = replace([Dir],'200901/14','200901/15')update [swf_Content] set [Description] =replace([Description],'200901/14','200901/15')update [swf_Content_01] set [content] = replace(convert(varchar(4000), [content]),'200901/14','200901/15') UPDATE [數(shù)據(jù)表名] SET [字段名] = REPLACE([字段名],'老字符串','新字符串') 比如,替換iwms文章數(shù)據(jù)表(iwms_news)中的標(biāo)題字段(title)的部分內(nèi)容,我們應(yīng)該這么寫:UPDATE [iwms_news] SET [title] = REPLACE([title],'老字符串','新字符串') 上面的sql語句在iwms后臺的sql執(zhí)行里面可以直接執(zhí)行,基本上可以搞定所有的替換操作,但是由于ntext數(shù)據(jù)長度的原因,這一方法對ntext類型字段無效。那我們該用什么方法替換ntext類型字段的內(nèi)容呢?方法有兩種:一是類型轉(zhuǎn)換,將ntext類型轉(zhuǎn)換為varchar類型,然后再用replace。適合于單頁內(nèi)容最大長度4000的文章。update [數(shù)據(jù)表名] set [字段名] = replace(convert(varchar(4000), [字段名]),'老字符串','新字符串') 比如,替換iwms文章數(shù)據(jù)表(iwms_news)中的標(biāo)題字段(content,ntext類型字段)的部分內(nèi)容,我們應(yīng)該這么寫:update iwms_news set [content] = replace(convert(varchar(4000),[content]),'老字符串','新字符串')二是SQLServer存儲過程declare @ptr varbinary(16) declare @artId int declare @Position int,@len int set @len = datalength('老字符串') declare wux_Cursor scroll Cursorforselect textptr([字段名]),[key字段名] from [數(shù)據(jù)表名] for read only open wux_Cursor fetch next from wux_Cursor into @ptr,@artId while @@fetch_status=0beginselect @Position=patindex('%老字符串%',[字段名]) from [數(shù)據(jù)表名] where [key字段名]=@artId while @Position0beginset @Position=@Position-1 updatetext [數(shù)據(jù)表名].[字段名] @ptr @Position @len '新字符串' select @Position=patindex('%老字符串%',[字段名]) from [數(shù)據(jù)表名] where [key字段名]=@artIdendfetch next from wux_Cursor into @ptr,@artIdendclose wux_cursor deallocate wux_cursor go比如,替換iwms文章數(shù)據(jù)表(iwms_news)中的標(biāo)題字段(content,ntext類型字段)的部分內(nèi)容,我們應(yīng)該這么寫declare @ptr varbinary(16) declare @artId int declare @Position int,@len int set @len = datalength('老字符串')
一、問題描述:
1。在Sql
Server
中,ntext/text/image
字段不允許應(yīng)用replace函數(shù)替換內(nèi)容;
2。通過convert字段轉(zhuǎn)換,可以把ntext字段轉(zhuǎn)換為varchar(8000),然后用Relpace函數(shù)替換,不過,此方法,對于字段長度大于8000的ntext字段無效。
二、問題解決
整理通用存儲過程,代碼如下:
復(fù)制代碼
代碼如下:
CREATE
procedure
[dbo].[Proc_UpdateNTextField]
@TargetTable
nvarchar(1000),
--目標(biāo)表名
@TargetField
nvarchar(1000),
--目標(biāo)字段名
@PKField
nvarchar(1000),
--該表主鍵字段名
@otxt
nvarchar(1000),
--需要替換的字符串
@ntxt
nvarchar(1000)
--替換后的字符串
as
begin
declare
@SqlStr
nvarchar(4000)
set
@SqlStr
=
'
declare
@txtlen
int
'
set
@SqlStr
=
@SqlStr
+
'
set
@txtlen
=
len('''
+
@otxt
+
''')
'
set
@SqlStr
=
@SqlStr
+
'
declare
@pos
int
'
set
@SqlStr
=
@SqlStr
+
'
set
@pos
=
'
set
@SqlStr
=
@SqlStr
+
'declare
curs
cursor
local
fast_forward
for
select
'
set
@SqlStr
=
@SqlStr
+
@PKField
+
'
,
textptr('
+
@TargetField
+')
from
'
+
@TargetTable
+'
where
'
+
@TargetField
+
'
like
''%'
+
@otxt
+'%'''
set
@SqlStr
=
@SqlStr
+
'
declare
@ptr
binary(16)
'
set
@SqlStr
=
@SqlStr
+
'
declare
@id
char(32)
'
set
@SqlStr
=
@SqlStr
+
'
open
curs
'
set
@SqlStr
=
@SqlStr
+
'
fetch
next
from
curs
into
@id,
@ptr
'
set
@SqlStr
=
@SqlStr
+
'
while
@@fetch_status
=
'
set
@SqlStr
=
@SqlStr
+
'
begin
'
set
@SqlStr
=
@SqlStr
+
'
select
@pos=
patindex(''%'
+
@otxt
+
'%'',ProductDesc)
from
ProductTemp
where
ProductID=@id
'
set
@SqlStr
=
@SqlStr
+
'
while
@pos0
'
set
@SqlStr
=
@SqlStr
+
'
begin
'
set
@SqlStr
=
@SqlStr
+
'
set
@pos=@pos-1
'
set
@SqlStr
=
@SqlStr
+
'
updatetext
'
+
@TargetTable
+
'.'
+@TargetField
+
'
@ptr
@pos
@txtlen
'''
+
@ntxt
+
'''
'
set
@SqlStr
=
@SqlStr
+
'
select
@pos=
patindex(''%'
+
@otxt
+
'%'',ProductDesc)
from
ProductTemp
where
ProductID=@id
'
set
@SqlStr
=
@SqlStr
+
'
end
'
set
@SqlStr
=
@SqlStr
+
'
fetch
next
from
curs
into
@id,
@ptr
'
set
@SqlStr
=
@SqlStr
+
'
end
'
set
@SqlStr
=
@SqlStr
+
'
close
curs
'
set
@SqlStr
=
@SqlStr
+
'
deallocate
curs
'
EXECUTE
sp_executesql
@SqlStr
end
你要看看你的A字段是什么類型。
如果是nvarchar
varchar等可以檢索的類型的話
用:
update
表
set
A=Replace(A,'aaa','bbb')
如果是ntext
text
類型的話,就麻煩點,看看一般文章內(nèi)容的長度有多少?如果少于8000字符
update
表
set
A=Replace(convert(varchar(8000),A),'aaa','bbb')
如果字?jǐn)?shù)比較多的話,就只能用程序從數(shù)據(jù)庫讀,然后用正則替換,再進(jìn)行修改。
我目前就知道這些,看看有高人還有更好的方法沒