0

我使用以下定义为 Teradata 标识列创建了一个表:

      默认生成的 ID 整数作为身份
           (从 1 开始
            增加 1
            最小值 0
            最大值 100000000
            无循环),
----
      唯一主索引 (ID)

几个月来,ID 列一直正常工作,自动为该列生成唯一值。然而,在过去的一个月里,ELMAH间歇性地从我们的 .NET 4.0 ASP.NET 应用程序中报告以下异常:

Teradata.Client.Provider.TdException: [Teradata Database] [2801] Duplicate unique prime key error in DATABASENAME.TABLENAME.

我能够通过打开 SQL 助手并使用原始 SQL 将一堆记录插入到表中来复制它。正如预期的那样,大多数时候它会成功插入,但其他时候它会抛出上述异常。

出现此错误的原因似乎是 Teradata 正在尝试为其先前生成的该列生成一个值。

有谁知道如何了解正在发生的事情?至少,我想要一些方法来更深入地调试这个问题。

4

1 回答 1

0

我建议更改身份列的定义,GENERATED ALWAYS以防止应用程序或 ETL 进程提供可能已使用的值。事实上,Teradata 建议,如果您将IDENTITY列用作 UPI 的一部分,则应将其定义为GENERATED ALWAYS ... NO CYCLE

编辑:

如果您的业务要求必须能够提供一个值,我也会考虑使用超出您为该IDENTITY列预留的值范围的域。您可以使用负域或超出 IDENTITY 列一个数量级的范围。个人偏好是使用否定域。

于 2012-07-30T20:56:51.433 回答