在使用iwms系统的过程中,我们会经常遇到数据内容的替换操作。在告诉大家如何替换数据内容之前,我建议大家先了解一下SQLServer数据库的数据存储类型:SQLServer数据类型:以上是数据库的基础知识,是做网站的朋友都应该知道的内容(无论你使用什么cms),所以建议大家都耐心看一下。数据替换一般都发生在字符串数据字段中,除了ntext类型字段以外的其他字符串数据字段都可以使用以下的sql语句进行替换: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[数据表名]SET[字段名]=REPLACE([字段名],'老字符串','新字符串')比如,替换iwms文章数据表(iwms_news)中的标题字段(title)的部分内容,我们应该这么写:UPDATE[iwms_news]SET[title]=REPLACE([title],'老字符串','新字符串')上面的sql语句在iwms后台的sql执行里面可以直接执行,基本上可以搞定所有的替换操作,但是由于ntext数据长度的原因,这一方法对ntext类型字段无效。那我们该用什么方法替换ntext类型字段的内容呢?方法有两种:一是类型转换,将ntext类型转换为varchar类型,然后再用replace。适合于单页内容最大长度4000的文章。update[数据表名]set[字段名]=replace(convert(varchar(4000),[字段名]),'老字符串','新字符串')比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写:updateiwms_newsset[content]=replace(convert(varchar(4000),[content]),'老字符串','新字符串')二是SQLServer存储过程declare@ptrvarbinary(16)declare@artIdintdeclare@Positionint,@lenintset@len=datalength('老字符串')declarewux_CursorscrollCursorforselecttextptr([字段名]),[key字段名]from[数据表名]forreadonlyopenwux_Cursorfetchnextfromwux_Cursorinto@ptr,@artIdwhile@@fetch_status=0beginselect@Position=patindex('%老字符串%',[字段名])from[数据表名]where[key字段名]=@artIdwhile@Position0beginset@Position=@Position-1updatetext[数据表名].[字段名]@ptr@Position@len'新字符串'select@Position=patindex('%老字符串%',[字段名])from[数据表名]where[key字段名]=@artIdendfetchnextfromwux_Cursorinto@ptr,@artIdendclosewux_cursordeallocatewux_cursorgo比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写declare@ptrvarbinary(16)declare@artIdintdeclare@Positionint,@lenintset@len=datalength('老字符串')declarewux_CursorscrollCursorforselecttextptr([content]),[articleid]fromiwms_newsforreadonlyopenwux_Cursorfetchnextfromwux_Cursorinto@ptr,@artIdwhile@@fetch_status=0beginselect@Position=patindex('%老字符串%',[content])fromiwms_newswhere[articleid]=@artIdwhile@Position0beginset@Position=@Position-1updatetextiwms_news.[content]@ptr@Position@len'新字符串'select@Position=patindex('%老字符串%',[content])fromiwms_newswhere[articleid]=@artIdendfetchnextfromwux_Cursorinto@ptr,@artIdendclosewux_cursordeallocatewux_cursorgook了,需要注意的是:存储过程只能在SQLServer查询分析器中执行。另外,由于iwms数据库结构的问题,有分页的文章内容需要先后对iwms_news和iwms_pages两个表内容进行替换操作。■(责编:Catherine)