首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为自动增量列找到下一个生成的值?

问如何为自动增量列找到下一个生成的值?
EN

Server Fault用户
提问于 2009-06-05 10:11:15
回答 4查看 33.5K关注 0票数 7

我在IBM 2的S自动增量列方面遇到了一些麻烦。起初,我的所有列都被定义为总是生成的,但是因为我在使用"db2导入.“时遇到了问题。命令,我将它们更改为默认生成。这是必要的,sinceI需要ID保持一致,因为其他表引用它们。所以使用"db2导入.由标识修改.“不是一种选择。

当我现在导入数据时,I是正确插入的,但是每次我这样做时,我必须记住通过获得最高的Id+1并像这样修改列,从而为自动增量列设置一个新的开始:

代码语言:javascript
复制
SELECT MAX(mycolumn)+ 1 FROM mytable;
ALTER TABLE mytable ALTER COLUMN mycolumn RESTART WITH <above_result>;

如果我忘记了这一点,插入语句将失败,同时会出现重复的PK错误,因为自动增量列是主键。

所以我的问题是:是否有一种方法可以为一个自动增量列找到下一个值,这样我就可以编写语句来检查,如果这个值小于SELECT MAX并需要设置?

或者:这整件事不像我看上去那么复杂吗?我是否可以以某种方式导入数据,保存I,并使自动增量列仍按预期工作?

EN

回答 4

Server Fault用户

回答已采纳

发布于 2009-06-09 11:30:31

Tim,我也遇到了同样的问题,我需要将标识重新启动到下一个值。我使用的是db2v9.1。

不幸的是,无法自动指定下一个值。根据DB2文档,该值应该是“数字常量”。因此,我不得不做一个select max(id),获取值并在alter..restart stmt中手动替换它。

我不记得我是否尝试过这样做--但是您可以编写一个sp,其中在变量中设置max(id),并在alter...restart stmt中分配变量。(我无法尝试,因为我再也无法访问任何db2数据库)。不过,我怀疑它会起作用。(如果有效,请告诉我:)

DB2参考资料:

使用数值常数

重新启动或重新启动

重置与标识列关联的序列的状态。如果未指定数字常量,则标识列的序列将以指定的值(隐式或显式)重新启动,作为最初创建标识列时的起始值。列必须存在于指定的表(SQLSTATE 42703)中,并且必须已经用IDENTITY属性定义(SQLSTATE 42837)。“重新启动”不会更改原始的“值”开始。

数值常量是一个精确的数值常量,可以是可以分配给该列的任何正负值(SQLSTATE 42815),而小数点右侧不存在非零位数(SQLSTATE 428 be )。数值常量将用作列的下一个值。

票数 4
EN

Server Fault用户

发布于 2012-12-18 08:59:01

您不能在DB2中使用序列号然后使用序列吗?nextval()?

链接到自动生成DB2:http://www.ibm.com/developerworks/data/library/techarticle/0302fielding/0302fielding.html中的序列值

票数 2
EN

Server Fault用户

发布于 2011-11-24 15:24:41

到目前为止,您的问题可能已经解决了,但是对于所有有相同问题的其他人,我可以为所有表提供一个获得max_id +1的解决方案。唯一的限制是,源列必须是一个自动增量列(GENERATED= 'D')。结果集可以通过clp或其他查询工具执行。

代码语言:javascript
复制
SELECT   'alter table ' || rtrim(TABSCHEMA) || '.' || TABNAME || ' alter column ' || COLNAME || ' restart with ' || 
cast((case when (trim ((replace ( HIGH2KEY, '+' , '' )))) = '' then 0 else integer(trim ((replace ( HIGH2KEY, '+' , '' ))))+2 end) as varchar(20)) 
|| ' ;'
FROM     SYSCAT.COLUMNS
WHERE    GENERATED = 'D'
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/20389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档