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
|