您的位置:首页 > 数据库

修改数据表列信息操作—SQL SERVER与DB2的区别

2009-03-09 09:01 260 查看
忙中得闲,学习了下DB2,却发现对于一些基本的操作SQL SERVER与DB2也有不少不同之处,接下慢慢道来。

由于本人先前主要接触的是SQL SERVER,因此先从SQL SERVER说起,首先SQL呈现:

--创建一测试数据表
create table test(username varchar(10), userinfo varchar(200))

--添加表列
alter table test add usertest varchar(100)

--删除表列
alter table test drop column usertest

--修改表列字段类型
alter table test alter column userinfo varchar(300)

--修改表列字段名
exec sp_rename 'test.userinfo', 'userdesc', 'column';

---修改表名
exec sp_rename 'test', 'test1', 'object';

综上,可以看出在SQL SERVER中添加、删除数据列,修改表列字段类型都可以直接通过SQL简单实现;但是修改列名和表名,则需要调用sp_rename存储过程,而通过帮助手册可以得知sp_rename可以更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。同时注意观察sysobjects表可以看出该表的ID、创建时间等信息未发生变化。

需要注意:通过sp_rename存储过程重命名存储过程和视图后,需要清空过程高速缓存以确保所有相关的存储过程和视图都重新编译。
试验完SQL SERVER 2000之后,接下来看下DB2的同样操作,试验环境是DB2 V8.2,主要是通过控制中心对数据表进行修改,获取相应的SQL,相应的SQL如下:

--创建一测试数据表
create table test(username varchar(10), userinfo varchar(200))

--添加新列
ALTER TABLE ADMINISTRATOR.TEST
ADD COLUMN USERTEST VARGRAPHIC (100) NOT NULL ;

--删除一列
CALL SYSPROC.ALTOBJ
( 'APPLY_CONTINUE_ON_ERROR'
, 'CREATE TABLE ADMINISTRATOR.TEST ( USERNAME VARCHAR (10) NOT NULL , USERINFO VARCHAR (100) NOT NULL )
ORGANIZE BY DIMENSIONS ( USERINFO) IN USERSPACE1 ', -1, ? );

--更改列类型
ALTER TABLE ADMINISTRATOR.TEST
ALTER COLUMN USERINFO SET DATA TYPE VARCHAR ( 100 ) ;

--修改表列字段名
CALL SYSPROC.ALTOBJ ( 'APPLY_CONTINUE_ON_ERROR'
, 'CREATE TABLE ADMINISTRATOR.TEST ( USERNAME VARCHAR (10) NOT NULL , USERINFO VARCHAR (100) NOT NULL )
ORGANIZE BY DIMENSIONS ( USERINFO) IN USERSPACE1 ', -1, ? );

---修改表名
RENAME TABLE ADMINISTRATOR.TEST TO TEST1;

可以看出DB2中增加列、更改列类型以及修改表名可以通过简单的SQL来进行实现,但是删除列以及修改列名则需要进行特殊的处理。
而在删除列及修改列名时,会有以下的提示:





通过该提示信息可以发现,DB2中删除列及修改列名的过程是首先建立临时表,将原表中的数据保存到临时表中,并按新定义(删除列,修改列)来重新创建表以及相关的索引等从属对象,紧接将临时表中所保存的数据还原到新表中,最后检查数据和关系的完整性。

实现如此,但如此实现的原因是什么?需要进一步探讨试验,大家也可以讨论。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: