DB2中如何创建能自动加一的字段?
2008-12-24 09:51
239 查看
环境 产品:DB2/400 平台:AS/400 版本:R510 |
如何创建能自动加一的字段? |
到目前为止,DB2 UDB for iSeries还没有支持字段自动加一的内部命令。从OS/400 V5R1M0开始支持的SQL存储过程使得实现这一功能变得简单易行。 1. 创建一个包含默认值为0的整数字段的表: CREATE TABLE COLLECTION.TABLE (NUMBER_FIELD INTEGER NOT NULL WITH DEFAULT 0, ... ) 2. 表建立完成后,立即创建一个触发器程序: CREATE TRIGGER AUTO_NUMBER AFTER INSERT ON COLLECTION.TABLE FOR EACH ROW MODE DB2SQL BEGIN DECLARE MAXNUM INT; SET MAXNUM = (SELECT MAX(NUMBER_FIELD) FROM COLLECTION.TABLE); SET MAXNUM = MAXNUM + 1; UPDATE COLLECTION.TABLE SET NUMBER_FIELD = MAXNUM WHERE NUMBER_FIELD = 0; END 3. 建议在该表上建立唯一索引,以保证该整数字段没有被插入重复的值: CREATE UNIQUE INDEX COLLECTION.INDEX ON COLLECTION.TABLE (NUMBER_FIELD) WITH 1 DISTINCT VALUES 4. 如果想在一个已经存在的表中增加该功能,则需要在表中增加一个字段,并且手工将已存在的 记录进行自动加一的工作, 那么在这之后插入的记录就能够按照触发器自动加一: ALTER TABLE COLLECTION.TABLE ADD COLUMN NUMBER_FIELD INTEGER NOT NULL WITH DEFAULT 0 5. 由于该触发器总会搜索表中最大的值,因此如果设定被删除的记录所占用的空间可以被重新 利用,那么该记录对应的数值将不被重新计算。 6. 由于该表定义的是整数类型的字段, 因此最大数值为: 2147483647,如果您需要更大的数,那么 可以将该字段该为BIGINT类型, 这样就可以达到 9223372036854775807 : ALTER TABLE COLLECTION.TABLE ALTER COLUMN NUMBER_FIELD SET DATA TYPE BIGINT NOT NULL WITH DEFAULT 0 |
相关文章推荐
- 如何用JET SQL DDL创建自动编号GUID字段
- 如何在MySQL&Oracle下创建自动递增字段
- 如何在Oracle下创建自动递增字段
- 数据库(mdb)、表、字段的自动创建,以及如何得到数据库中所有表的名字
- mssql 和 mysql的区别,让自动增长列自动递增就必须指定其他列名,mysql创建事务,如果插入的字符多余字段的值,会报错?截取插入?带输出参数的存储过程,带If else判断
- 详解在Spring中如何自动创建代理
- 【转载】Myeclipse如何自动创建hibernate
- Oracle中如何实现某一字段自动增加1?
- Myeclipse如何自动创建hibernate
- 用SQL在Access中创建带自动增长字段的表
- 如何在ACCESS数据库表中创建各种数据类型的字段
- 在Access中创建表及如何指定字段类型
- Oracle 自动加一主键字段生成
- 如何设置水晶报表(crystal reports)的字段自动换行
- Mysql 如何设置字段自动获取当前时间
- SQL Server 2008如何创建定期自动备份任务
- Myeclipse如何自动创建hibernate 转载
- LOB字段相关概念(自动创建LOB索引段和重建索引方法)
- 如何在Delphi中用代码来完成计算字段的创建
- 如何用VS2010在SharePoint中创建自定义字段类型(以eWebEditor为例)