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

忙中得闲,学习了下DB2,却发现对于一些基本的操作SQL SERVERDB2也有不少不同之处,接下慢慢道来。

 

 

由于本人先前主要接触的是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中删除列及修改列名的过程是首先建立临时表,将原表中的数据保存到临时表中,并按新定义(删除列,修改列)来重新创建表以及相关的索引等从属对象,紧接将临时表中所保存的数据还原到新表中,最后检查数据和关系的完整性。

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值