修改数据表列信息操作—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中删除列及修改列名的过程是首先建立临时表,将原表中的数据保存到临时表中,并按新定义(删除列,修改列)来重新创建表以及相关的索引等从属对象,紧接将临时表中所保存的数据还原到新表中,最后检查数据和关系的完整性。
实现如此,但如此实现的原因是什么?需要进一步探讨试验,大家也可以讨论。
由于本人先前主要接触的是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中删除列及修改列名的过程是首先建立临时表,将原表中的数据保存到临时表中,并按新定义(删除列,修改列)来重新创建表以及相关的索引等从属对象,紧接将临时表中所保存的数据还原到新表中,最后检查数据和关系的完整性。
实现如此,但如此实现的原因是什么?需要进一步探讨试验,大家也可以讨论。
相关文章推荐
- java操作sql server数据添加,修改,删除记录
- sql server 2005 中数据库表 的创建 ,查看表 属性,表的名称重命名,情况表中信息,删除表 ; 表中列重命名,添加新列,修改列的数据类型,删除列,设置列的主键外键
- nodejs操作mogodb修改数据信息
- SQL Server中Text和varchar(max)数据类型区别
- 在ASP.NET 2.0中操作数据之二十三:基于用户对修改数据进行限制
- SQL Server实现用触发器捕获DML操作的会话信息【实例】
- SQL应用与开发:(七)数据操作 · 查 · (三)使用子查询访问和修改数据
- Sql Server实用操作-删除数据库中重复数据的几个方法
- 数据库与表的操作之创建、修改和删除数据
- SQL Server利用数据库日志恢复数据到时间点的操作
- SQL Server中Text和varchar(max)数据类型区别
- DataGridView 直接修改数据操作
- SQL Server 2008中的分区表(二):如何添加、查询、修改分区表中的数据
- SQL Server 数据格式修改时,没有保存按钮的情况解决
- 批量修改 SQL SERVER 数据
- 文件操作写入和读出结构体--修改文件信息
- Sql Server 自增列无法写入或 无法将已有数据的列修改为自增的方法
- 学生信息管理系统之修改数据信息
- 通过ArcGIS for JS修改地理数据操作技术流程
- 基本查询语句及利用SQL语句完成数据的添加、删除、修改操作