葡京网投哪个正规 > 新葡亰-编程 > 批量更新数据库所有表中字段的内容,Server数据库内容替换方法

原标题:批量更新数据库所有表中字段的内容,Server数据库内容替换方法

浏览次数:133 时间:2020-03-25

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)

/*
author:amjn
date:2003-03-28
version:1.0
function:替换text,ntext列中的字符串(不支持中文)
*/
declare @ptr varbinary(16)
declare @amjnId int
declare @Position int,@len int
set @len=datalength('ILOVEHJL')  
declare wux_Cursor scroll Cursor
for
select textptr([Name]),[amjnId] from USA201
for read only
葡京正网网投,open wux_Cursor
fetch next from wux_Cursor into @ptr,@amjnId
while @@fetch_葡京网投哪个正规,status=0
begin
  select @Position=patindex('%ILOVEHJL%',[Name]) from USA201 where [amjnId]=@amjnId
  while @Position>0
  begin
    set @Position=@Position-1
    updatetext USA201.[Name] @ptr @Position @len 'i love hjl'
    select @Position=patindex('%ILOVEHJL%',[Name]) from USA201 where [amjnId]=@amjnId
  end
  fetch next from wux_Cursor into @ptr,@amjnId
end
close wux_cursor
deallocate wux_cursor
go

一、问题描述: 1。在Sql Server 中,ntext/text/image 字段不允许应用replace函数替换内容; 2。通过convert字段转换,可以把ntext字段转换为varchar,然后用Relpace函数替换,不过,此方法,对于字段长度大于8000的ntext字段无效。 二、问题解决 整理通用存储过程,代码如下: 复制代码 代码如下: CREATE procedure [dbo].[Proc_UpdateNTextField] @TargetTable nvarchar(1000), --目标表名 @TargetField nvarchar(1000), --目标字段名 @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 = 0 ' 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 = 0 ' 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

复制代码 代码如下:declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b ,systypes c where a.id=b.id and a.xtype='u' and c.name in ('char', 'nchar', 'nvarchar', 'varchar','text','ntext'/* --这里如果你的text(ntext)类型没有超过8000(4000)长度,才可以使用*/) declare @str varchar(500),@str2 varchar(500) set @str='a' /*这里是你要替换的字符*/ set @str2='' /*替换后的字符*/ open table_cursor fetch next from table_cursor into @t,@c while(@@fetch_status=0) begin exec('update [' + @t + '] set [' + @c

数据替换一般都发生在字符串数据字段中,除了ntext类型字段以外的其他字符串数据字段都可以使用以下的sql语句进行替换:

  • ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''+ @str2 +''')') fetch next from table_cursor into @t,@c end close table_cursor deallocate table_cursor; 小于8000的处理 update buyok_Orderlist set Notes=replace(cast(Notes as varchar(8000)),'a','') 如果text/ntext超过8000/4000,看如下例子没有试过 declare @pos int declare @len int declare @str nvarchar(4000) declare @des nvarchar(4000) declare @count int set @des ='requested_amount+1'--要替换成的值 set @len=len(@des) set @str= 'requested_amount'--要替换的字符 set @count=0--统计次数. WHILE 1=1 BEGIN select @pos=patINDEX('%'+@des+'%',propxmldata) - 1 from 表名 where 条件 IF @pos=0 begin DECLARE @ptrval binary(16) SELECT @ptrval = TEXTPTR(字段名) from 表名 where 条件 UPDATETEXT 表名.字段名 @ptrval @pos @len @str set @count=@count+1 end ELSE break; END select @count

update [数据表名] set [字段名] = replace(convert(varchar(4000), [字段名]),老字符串,新字符串) 比如,替换iwms文章数据表中的标题字段的部分内容,我们应该这么写:

UPDATE [iwms_news] SET [title] = REPLACE([title],老字符串,新字符串) 上面的sql语句在iwms后台的sql执行里面可以直接执行,基本上可以搞定所有的替换操作,但是由于ntext数据长度的原因,这一方法对ntext类型字段无效。那我们该用什么方法替换ntext类型字段的内容呢?方法有两种:

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

在使用iwms系统的过程中,我们会经常遇到数据内容的替换操作。在告诉大家如何替换数据内容之前,我建议大家先了解一下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([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 @Position0 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查询分析器中执行。

二是SQL Server存储过程

以上是数据库的基础知识,是做网站的朋友都应该知道的内容,所以建议大家都耐心看一下。

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

SQL Server数据类型:

一是类型转换,将ntext类型转换为varchar类型,然后再用replace。适合于单页内容最大长度4000的文章。

UPDATE [数据表名] SET [字段名] = REPLACE([字段名],老字符串,新字符串) 比如,替换iwms文章数据表中的标题字段的部分内容,我们应该这么写:

核心提示:在使用iwms系统的过程中,我们会经常遇到数据内容的替换操作

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 @Position0 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文章数据表中的标题字段的部分内容,我们应该这么写

本文由葡京网投哪个正规发布于新葡亰-编程,转载请注明出处:批量更新数据库所有表中字段的内容,Server数据库内容替换方法

关键词:

上一篇:没有了

下一篇:没有了