推薦一個text或ntext 字段內容替換方法

Sql Server 中 text或ntext 字段內容替換方法總結


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 ='<requested_amount+1>'--要替換成的值
   set @len=len(@des)
   set @str= '<requested_amount>'--要替換的字符
   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 (可以通過pdfsp_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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章