点击这里给我发消息 点击这里给我发消息
首页 > 行业资讯 > MSSQL>详细内容

MSSQL Server数据库内容替换方法

添加时间:2014-6-30
    相关阅读: 做网站 数据库 SQL MSSQL 网站 系统

在使用iwms系统的过程中,我们会经常遇到数据内容的替换操作。在告诉大家如何替换数据内容之前,我建议大家先了解一下SQL Server数据库的数据存储类型:

  SQL Server数据类型:

  以上是数据库的基础知识,是做网站的朋友都应该知道的内容(无论你使用什么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类型字段)的部分内容,我们应该这么写:

  update iwms_news set [content] = replace(convert(varchar(4000),[content]),'老字符串','新字符串')

  二是SQL Server存储过程

  declare @ptr varbinary(16)
  declare @artId int
  declare @Position int,@len int
  set @len = datalength('老字符串')
  declare wux_Cursor scroll Cursor
  for
  select textptr([字段名]),[key字段名] from [数据表名]
  for read only
  open wux_Cursor
  fetch next from wux_Cursor into @ptr,@artId
  while @@fetch_status=0
  begin
  select @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artId
  while @Position>0
  begin
  set @Position=@Position-1
  updatetext [数据表名].[字段名] @ptr @Position @len '新字符串'
  select @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artId
  end
  fetch next from wux_Cursor into @ptr,@artId
  end
  close wux_cursor
  deallocate wux_cursor
  go
  比如,替换iwms文章数据表(iwms_news)中的标题字段(content,ntext类型字段)的部分内容,我们应该这么写

  declare @ptr varbinary(16)
  declare @artId int
  declare @Position int,@len int
  set @len = datalength('老字符串')
  declare wux_Cursor scroll Cursor
  for
  select textptr([content]),[articleid] from iwms_news
  for read only
  open wux_Cursor
  fetch next from wux_Cursor into @ptr,@artId
  while @@fetch_status=0
  begin
  select @Position=patindex('%老字符串%',[content]) from iwms_news where [articleid]=@artId
  while @Position>0
  begin
  set @Position=@Position-1
  updatetext iwms_news.[content] @ptr @Position @len '新字符串'
  select @Position=patindex('%老字符串%',[content]) from iwms_news where [articleid]=@artId
  end
  fetch next from wux_Cursor into @ptr,@artId
  end
  close wux_cursor
  deallocate wux_cursor
  go
  ok了,需要注意的是:存储过程只能在SQL Server查询分析器中执行。

  另外,由于iwms数据库结构的问题,有分页的文章内容需要先后对iwms_news和iwms_pages两个表内容进行替换操作。

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册