2012-07-30 12 views
0

在Oracle中,我曾经使用序列为表的唯一标识符生成值。在存储过程中,我会调用sequencename.nextval并将该值分配给一个变量。之后,我将使用该变量作为过程的插入语句和过程的出参数,以便我可以将新生成的ID传递给.NET客户端。Teradata:是否可以在不创建记录的情况下生成标识列值?

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

回答

3

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

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

相关问题