当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 如何替换SQL Server数据库内容

MSSQL
将表数据生成SQL脚本的存储过程和工具
初学者必读:经典的数据库记录分页代码
使用SQL Server 2008管理非结构化数据
利用索引提高SQL Server数据处理的效率
SQL Server数据库内存会不断增加的问题分析
面向对象设计过程中必须遵守的相关准则
SQL Server 2005如何设置多字段做关键字
SQL Server 2005数据库中表的递归查询
SQL Server中使用DTS设计器进行数据转移
在查询分析器理启动或停止SQL Agent服务
教你快速掌握SQL语言中游标的使用技巧
将SQL Server中所有表的列信息显示出来
使用SQL语句快速获取SQL Server数据字典
Sql Server 2005中的架构用户登录和角色
如何保存数据库连接参数代码及步骤详解
如何使用SQL Server数据库嵌套子查询
SQL Server从安装到建库为新手寻找捷径
课程讲解 如何使用SQL Server校勘功能
数据库理论:学习基于SQL数据库的算法
教你使用SQL Server数据库进行网络链接

MSSQL 中的 如何替换SQL Server数据库内容


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 170 ::
收藏到网摘: n/a

在使用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两个表内容进行替换操作。

原文:http://edu.itbulo.com/200904/125440.htm