sqlserver 中ntext字段的批量替换(updatetext的用法)

一、问题描述:

1。在Sql Server 中,ntext/text/image 字段不允许应用replace函数替换内容;

2。通过convert字段转换,可以把ntext字段转换为varchar(8000),然后用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 @pos>0 '

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

时间: 2024-11-13 03:49:48

sqlserver 中ntext字段的批量替换(updatetext的用法)的相关文章

SQL中NTEXT字段内容显示<long text>的原因_数据库其它

我用ACCESS转换成SQL数据库,其中一个放置文本内容的列他的数据类型为ntext,长度却是16,而且锁定了,不能修改,允许空.  当字符长度过长时(几千个汉字),数据库中对应的字段显示<LONG TEXT>. 当ntext中的文字长度超出了一定限制时就显示<long text>,因为过长数据库将以16进制的方式存放了.就不能直接查看,所以显示为<long text>.可以直接通过sql语句修改.

asp.net中C# 操作Word批量替换

首先引入Microsoft.Office.Interop.Word组件,该组件在安装完office后在COM中出现    代码如下 复制代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace TextReplace {     public class WordOperate : IDisposable

sqlserver中if exists和if not exists关键字用法

在sql语名中,if not exists 即如果不存在,if exists 即如果存在. 下面学习下二者的用法. a,判断数据库不存在时   if not exists(select * from sys.databases where name = 'database_name') b,判断表不存在时   if not exists (select * from sysobjects where id = object_id('table_name') and OBJECTPROPERTY(

sqlserver中drop、truncate和delete语句的用法_数据库其它

虽然小编不建议大家去用命令删除数据库表中的东西,但是这些删除命令总有用的着的地方. 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大------drop 出没场合:drop table  tb --tb表示数据表的名字,下同 绝招:删除内容和定义,释放空间.简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表,        例如:一

sql ntext替换与批量替换方法

一款mssql server 的ntext字段里面数据替换ntext 长度可变的 Unicode 数据,最大长度为 2^30 - 1 (1,073,741,823) 个字符.存储大小是所输入字符个数的两倍(以字节为单位).ntext 的 ISO 同义词为 national text. 他和text不同   ---ntext数据类型字符替换 create table tt ( sid INT IDENTITY(1,1), cont ntext ) go insert into tt(cont) v

MSSQL批量替换语句 在SQL SERVER中批量替换字符串的方法

方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 复制代码 代码如下:update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么') 方法二:(替换其他数据类

MSSQL批量替换语句 在SQL SERVER中批量替换字符串的方法_MsSql

方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 复制代码 代码如下: update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么') 方法二:(替换其他数据

在SQL SERVER中批量替换字符串的方法

  方法一:(这种是最常用的,因为很多大段的内容都使用text ntext等数据类型,而我们通常也是替换里面的内容) varchar和nvarchar类型是支持replace,所以如果你的text不超过8000可以先转换成前面两种类型再使用replace 替换 text ntext 数据类型字段的语句 update 表名 set 字段名=replace(cast(与前面一样的字段名 as varchar(8000)) ,'原本内容','想要替换成什么') 方法二:(替换其他数据类型字段的语句,实

在sqlserver中如何根据字段名查找字段所在的表

server|sqlserver 面的sql语句在sqlserver中根据字段名查询,看哪些表包含了这个字段 复制SQL代码保存代码select   a.name   表名,b.name   列名   from   sysobjects   a,syscolumns   b   where   a.id=b.id   and   b.name='表名'  and   a.type='U'