Teradata:是否可以在不创建记录的情况下生成标识列值?

时间:2012-07-30 19:33:20

标签: teradata identity-column

在Oracle中,我曾经使用序列为表的唯一标识符生成值。在存储过程中,我调用sequencename.nextval并将该值赋给变量。之后,我将该变量用于过程的insert语句和过程的out参数,这样我就可以将新生成的ID传递给.NET客户端。

我想对Teradata做同样的事情,但我认为实现这一目标的唯一方法是创建一个包含按顺序递增的值的表。但是,理想情况下,我真的希望能够获取将用于标识列的下一个值的值,而无需在数据库中实际创建新记录。

1 个答案:

答案 0 :(得分:3)

不,Teradata无法实现,因为根据正在执行的操作类型,可以在解析引擎(PE)或AMP级别缓存Identify值。我的理解是DBC.IdCol表显示了下一个值,该值将用于为PE或AMP所需的下一批IDENTITY值播种。

另一种解决方案是避免以这种方式为您的UPI使用IDENTITY。您始终可以使用由逻辑主键分区的ROW_NUMBER()窗口聚合函数来为您的代理键设置下一个值范围。