0

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

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

4

1 回答 1

3

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

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

于 2012-07-30T21:02:06.297 回答