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

(0)

相关推荐

  • 批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码

    首先备份数据库,以防不必要的损失.而后对所有被挂马的小于8000字符的varchar字段执行 复制代码 代码如下: update 表名 set 字段名=replace(字段名,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','') 其中<Script Src=http://c.n%75clear3.com/css/c.js></Script>为挂马字段.执行后挂马字段被清除.但是有部分字段,比

  • sqlserver replace函数 批量替换数据库中指定字段内指定字符串参考方法

    语法 REPLACE ( 'string_e­xpression1' , 'string_e­xpression2' , 'string_e­xpression3' ) 参数说明 'string_e­xpression1' 待搜索的字符串表达式.string_e­xpression1 可以是字符数据或二进制数据. 'string_e­xpression2' 待查找的字符串表达式.string_e­xpression2 可以是字符数据或二进制数据. 'string_e­xpression3' 替换

  • SqlServer中批量替换被插入的木马记录

    最近找了找 批量替换被插入的木马记录,找到了一条好的语句,用处很大,仅仅使用十几行游标语句,把整个数据库的所有表的恶 意木马清除掉了,而且在Google搜索到此记录几率很小,在此专门转载一下!为了以后自己能找得到,也希望后人能得到帮助. 原文如下: 复制代码 代码如下: declare @t varchar(555),@c varchar(555) ,@inScript varchar(8000) set @inScript='恶意代码' declare table_cursor cursor

  • sqlserver 批量数据替换助手V1.0版发布

    这种方法操作繁琐,而且一般不是很懂数据库的人很难操作.于萌发了要写一个小程序的念头,经过两天时间的折腾这个小软件终于和各位见面了,希望各位童鞋多给点意见.说了这么些之后还是先上界面吧,^..^ 现在就来说说这个小程序的开发思路吧.第一步:通过 sp_helpdb系统存储过程得到SqlServer中的所有数据库名称. 复制代码 代码如下: #region 测试数据库连接,并显示数据库列表 /// <summary> /// 测试数据库连接,并显示数据库列表 /// </summary>

  • SQL Server中对数据截取替换的方法详解

    REPLACE(要修改字段名,'被替换的特定字符','替换的字符') 表结构和插入数据 CREATE DATABASE TEST GO USE TEST GO CREATE TABLE TestTable ( UserName VARCHAR(50), UserPwd VARCHAR(50) ) GO INSERT INTO TestTable (UserName,UserPwd) VALUES ('ASDFFFF','WWWEEE') INSERT INTO TestTable (UserNa

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

    一.问题描述: 1.在Sql Server 中,ntext/text/image 字段不允许应用replace函数替换内容: 2.通过convert字段转换,可以把ntext字段转换为varchar(8000),然后用Relpace函数替换,不过,此方法,对于字段长度大于8000的ntext字段无效. 二.问题解决 整理通用存储过程,代码如下: 复制代码 代码如下: CREATE procedure [dbo].[Proc_UpdateNTextField] @TargetTable nvarc

  • C#更新SQLServer中TimeStamp字段(时间戳)的方法

    本文实例讲述了C#更新SQLServer中TimeStamp字段(时间戳)的方法.分享给大家供大家参考.具体实现方法如下: public partial class Form1 : Form { private SqlConnection mCnn = null; private long TimeStampValue; public Form1() { InitializeComponent(); mCnn = new SqlConnection(); mCnn.ConnectionStrin

  • SQL中NTEXT字段内容显示&lt;long text&gt;的原因

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

  • sqlserver中drop、truncate和delete语句的用法

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

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

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

  • VBS脚本实现遍历批量替换多目录多文件内容的代码

    有时候我们需要将一个目录与子目录中的多个htm网页文件实现批量替换,这里就为大家分享一下 将以下代码复制到一个文本文档中,并将文本文档的后缀修改为.vbs,直接运行即可 Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cmd /c dir /s/b *.htm > list.htm",vbHide Wscript.Sleep 1000 sFile = "list.htm"

  • 批量替换 MySQL 指定字段中的字符串

    批量替换的具体语法是: 复制代码 代码如下: UPDATE 表名 SET 指定字段 = replace(指定字段, '要替换的字符串', '想要的字符串') WHERE 条件; 如果你想把 article 表中 ID 小于5000的记录,content 字段中"解决"替换成"解放",那么语法就是: 复制代码 代码如下: UPDATE article SET content = replace(content, '解决', '解放') WHERE ID<5000

  • Mysql中批量替换某个字段的部分数据(推荐)

    MYSQL中批量替换某个字段的部分数据,具体介绍如下所示: 1.修改字段里的所有含有指定字符串的文字 UPDATE 表A SET 字段B = replace(字段B, 'aaa', 'bbb') example: update table set url= replace(url, 'aaa', 'bbb') [将url字段中的aaa批量更改为bbb] update table set url= REPLACE (url,'3','1.png') where 条件; 2.常规条件修改: upda

随机推荐