视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQLServer中text或ntext字段内容替换方法
2020-11-09 13:41:43 责编:小采
文档


update 表名 set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值') 1.update ntext: (1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace。 u

  update 表名

  set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')

  1.update ntext:

  (1)varchar和nvarchar类型是支持replace,所以如果你的text/ntext不超过8000/4000可以先转换成前面两种类型再使用replace。

  update 表名

  set text类型字段名=replace(convert(varchar(8000),text类型字段名),'要替换的字符','替换成的值')

  update 表名

  set ntext类型字段名=replace(convert(nvarchar(4000),ntext类型字段名),'要替换的字符','替换成的值')

  (2)如果text/ntext超过8000/4000,看如下例子

  declare @pos int

  declare @len int

  declare @str nvarchar(4000)

  declare @des nvarchar(4000)

  declare @count int

  set @des ='

  set @len=len(@des)

  set @str= ''--要替换的字符

  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

  2.alter column语句有局限性,比如不允许修改text、image、ntext 或 timestamp 列.

  以下提供一个修改ntext列的例子:

  Alter Table tbl Add newcol ntext null

  go

  update tbl set newcol=col

  go

  EXEC sp_rename 'tbl.col', 'oldcol', 'COLUMN'

  go

  EXEC sp_rename 'tbl.newcol', 'col', 'COLUMN'

  go

  alter table tbl drop column oldcol

  go

  以上通过新增一列替换旧的列方法实现了将一个不允许为空的ntext修改为允许为空的ntext列(注意:以上的go不能缺少).修改表结构之后,由于视图所依赖的基础对象的更改,视图的持久元数据会过期,需要刷新视图,通过sp_refreshview (可以通过sp_depends 找处相关的视图,再通过sp_refreshview逐个刷新).

  另外可以也可以通过一下存储过程进行刷新所有视图:

  PRINT 'Refreshing all views...'

  DECLARE @vName sysname

  DECLARE refresh_cursor CURSOR FOR

  SELECT Name from sysobjects WHERE xtype = 'V'

  order by crdate

  FOR READ ONLY

  OPEN refresh_cursor

  FETCH NEXT FROM refresh_cursor

  INTO @vName

  WHILE @@FETCH_STATUS <> -1

  BEGIN

  exec sp_refreshview @vName

  PRINT '视图' + @vName + ' refreshed'

  FETCH NEXT FROM refresh_cursor

  INTO @vName

  END

  CLOSE refresh_cursor

  DEALLOCATE refresh_cursor

下载本文
显示全文
专题