Sql Server 中 text或ntext 欄位內容替換方法

來源:互聯網
上載者:User


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 (可以通過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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.