网站建设资讯

NEWS

网站建设资讯

sqlserver替换,sqlserver替换字段某字符

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

一、问题描述:

创新互联-云计算及IDC服务提供商,涵盖公有云、IDC机房租用、西云机房、等保安全、私有云建设等企业级互联网基础服务,联系电话:18982081108

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

=

'

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

=

'

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

请问如何替换SQL SERVER中某字段内容中的某一字段

你要看看你的A字段是什么类型。

如果是nvarchar

varchar等可以检索的类型的话

用:

update

set

A=Replace(A,'aaa','bbb')

如果是ntext

text

类型的话,就麻烦点,看看一般文章内容的长度有多少?如果少于8000字符

update

set

A=Replace(convert(varchar(8000),A),'aaa','bbb')

如果字数比较多的话,就只能用程序从数据库读,然后用正则替换,再进行修改。

我目前就知道这些,看看有高人还有更好的方法没

如何替换SQL Server数据库内容

在告诉大家如何替换数据内容之前,我建议大家先了解一下SQL Server数据库的数据存储类型:在使用iwms系统的过程中,我们会经常遇到数据内容的替换操作。在告诉大家如何替换数据内容之前,我建议大家先了解一下SQLServer数据库的数据存储类型:SQLServer数据类型:以上是数据库的基础知识,是做网站的朋友都应该知道的内容(无论你使用什么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]),'老字符串','新字符串')二是SQLServer存储过程declare @ptr varbinary(16) declare @artId int declare @Position int,@len int set @len = datalength('老字符串') declare wux_Cursor scroll Cursorforselect textptr([字段名]),[key字段名] from [数据表名] for read only open wux_Cursor fetch next from wux_Cursor into @ptr,@artId while @@fetch_status=0beginselect @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artId while @Position0beginset @Position=@Position-1 updatetext [数据表名].[字段名] @ptr @Position @len '新字符串' select @Position=patindex('%老字符串%',[字段名]) from [数据表名] where [key字段名]=@artIdendfetch next from wux_Cursor into @ptr,@artIdendclose 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('老字符串')


分享标题:sqlserver替换,sqlserver替换字段某字符
当前地址:http://njwzjz.com/article/dsicdps.html