如何获取将在IDENTITY列上使用的下一个值

时间:2010-03-16 17:32:09

标签: sql db2

我在LUW上使用DB2 v9。

我的列定义如下:

"ID" BIGINT NOT NULL GENERATED BY DEFAULT
AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20,
NO MINVALUE, NO MAXVALUE, NO CYCLE, NO ORDER),

我想知道下次将记录插入表格时确定ID列的下一个值的最佳方法。

我将使用此信息编写一个脚本,对IDENTITY仍然完整的表进行“健全性”检查,并且其下一个值大于ID列中的最高值。

我不想盲目地重置价值。如果表格未通过完整性检查,我希望收到通知,以便我可以确定导致IDENTITY被“搞砸”的原因。

3 个答案:

答案 0 :(得分:1)

您无法确定下一个身份。即使您在尝试创建新记录时也可能存在数据不同步的风险。唯一要做的就是创建一个新记录并获取新标识,进行检查,然后使用其余数据更新记录。

您可以使用SELECT IDENT_CURRENT('yourtablename')来生成最后一个。这与上面的注意事项有同样的警告。这适用于T-SQL,在DB2风格中不确定。

答案 1 :(得分:1)

我认为这不会像你期望的那样奏效。考虑插入行的情况,然后在插入另一行之前删除该行。此时,自动生成的id将比(DB)中的最高值(至少)2大2并且它将是正确的。如果你可以保证没有删除,它可能会有效,但我不确定它会有什么用处。

基本上,您正在检查数据库软件的基本操作是否正常,如果不是,您打算做什么?改变供应商?

如果情况是您只想重新设置标识列,则执行select max(id)并在同一事务中重新设置该列。通过强制执行可序列化的隔离级别事务语义,可以确保在重新引用列时不会插入新记录。

答案 2 :(得分:0)

如果ID列设置为GENERATED BY ALWAYS,那么加载/导入不正确就不会有问题。此外,IDENTITY_VAL_LOCAL函数可用于获取标识值 有关此功能的更多信息here