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

Teradata:是否可以在不创建记录的情况下生成标识列值?,teradata,identity-column,Teradata,Identity Column,在Oracle中,我使用序列为表的唯一标识符生成值。在存储过程中,我调用sequencename.nextval并将该值赋给变量。之后,我将该变量用于过程的insert语句和过程的out参数,以便将新生成的ID传递给.NET客户端 我想对Teradata做同样的事情,但我认为实现这一点的唯一方法是创建一个表,其中包含一个按顺序递增的值。但是,理想情况下,我希望能够获取将用于标识列下一个值的值,而无需在数据库中实际创建新记录。不,使用Teradata是不可能的,因为根据所执行的操作类型,在解析引擎

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


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

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


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

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

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