Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1438955
  • 博文数量: 18
  • 博客积分: 9950
  • 博客等级: 中将
  • 技术积分: 4242
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-08 10:08
文章分类

全部博文(18)

文章存档

2009年(3)

2008年(15)

我的朋友

分类: 数据库开发技术

2008-07-02 13:49:05


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

阅读(4098) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-12 14:18:16

学习了,我的站点里的查询语也有碰到这个问题 欢迎回访我的站点汽配商务网http://www.qpbay.com 汽配站内查询里的语句加上排排序,真是个乱,有空多交流

chinaunix网友2009-12-24 12:46:23

上面的@des和@str写反了

chinaunix网友2009-03-18 14:58:15

学习了

chinaunix网友2008-10-31 10:16:11

学习了。 非常不错。 P.S. 有一个地方错了: select @pos=patINDEX('%'+@des+'%',propxmldata) - 1 应为: select @pos=patINDEX('%'+@des+'%',字段名) - 1