【问题标题】:Teradata: Is it possible to generate an identity column value without creating a record?Teradata:是否可以在不创建记录的情况下生成标识列值?
【发布时间】:2012-07-31 05:02:06
【问题描述】:
在 Oracle 中,我曾经使用序列来为表的唯一标识符生成值。在存储过程中,我会调用 sequencename.nextval 并将该值分配给一个变量。之后,我将该变量用于过程的插入语句和过程的输出参数,以便将新生成的 ID 传递给 .NET 客户端。
我想对 Teradata 做同样的事情,但我认为实现此目的的唯一方法是创建一个包含按顺序递增的值的表。然而,理想情况下,我真的希望能够获得将用于标识列的下一个值的值,而无需实际在数据库中创建新记录。
【问题讨论】:
标签:
teradata
identity-column
【解决方案1】:
不,Teradata 不可能,因为根据正在执行的操作类型,Identify 值在解析引擎 (PE) 或 AMP 级别缓存。我的理解是 DBC.IdCol 表显示了下一个值,该值将用于播种 PE 或 AMP 所需的下一批 IDENTITY 值。
另一种解决方案是避免以这种方式为您的 UPI 使用IDENTITY。您始终可以使用由逻辑主键分区的 ROW_NUMBER() 窗口聚合函数来为您的代理键设置下一个值范围。