sqlserver中关于text/ntext列的一些处理技巧
2007-11-29 10:31
573 查看
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
address:http://www.cnblogs.com/lwyaster/archive/2007/01/09/615819.html
(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
address:http://www.cnblogs.com/lwyaster/archive/2007/01/09/615819.html
相关文章推荐
- sqlserver中关于text/ntext列的一些处理技巧
- 关于一些业务逻辑的处理技巧
- python3-cookbook中一些关于字符串和文本的处理方式
- 关于Photoshop切图的一些技巧
- android 中的一些焦点处理(listView GridView 抢焦点 与focus技巧)
- 关于js处理的一些公用代码收集.(代码+demo)
- 关于symbian按键事件的一些总结(2)----------按键事件的处理
- 关于ADO 连接 SQLServer的事务处理。
- 关于集合整数表示的一些技巧以及状态压缩dp入门(POJ3254)
- 关于字符串处理的一些工具类
- Android关于Activity的一些使用和全局管理技巧
- 关于bug分析与异常处理的一些思考
- 关于目录处理的一些函数
- 关于oracle中大对象处理的一些方法和实例
- 关于DirectShow在Video视频处理方面的的一些基本应用
- 关于TextView的一些特殊处理
- 关于reportTo关系 与 OneToOne关系 的一些技巧
- 关于项目中异常处理的一些总结
- 关于网游服务器逻辑多线程处理的一些经验
- ABAP--关于ABAP流程处理的一些命令的说明(stop,exit,return,check,reject)