程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> SQL Server中text或ntext 字段內容替換方法

SQL Server中text或ntext 字段內容替換方法

編輯:關於MYSQL數據庫

       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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved