【发布时间】:2019-12-21 18:11:33
【问题描述】:
向现有数据库表 (PA0023) 添加了一个新列。
数据库:HANA
该列应该是唯一的,因此我尝试通过SE11 创建唯一索引约束。
激活成功。但是,通过Utilities... Database Utility创建索引时,出现了错误:
请求:创建索引 PA0023-Z01
...
sql:
CREATE UNIQUE INDEX 'PA0023~Z01' ON 'PA0023' ('MANDT', 'RECORD_KEY')无法创建唯一索引;发现重复键 [5] 索引中存在多个具有相同 ID 的文档;SAPABAP1:PA0023.$uc_PA0023~Z01$ 内容不唯一,无法定义唯一约束。 rowCount != distinctCount。
该列中没有填充相同值的行。有空值的行被认为是重复的。在开发环境中替换空白后,索引创建良好。这在生产中不太可能,因为在该新字段中有许多记录为空值。
所以我的问题是:有没有办法在不替换空白的情况下创建唯一约束?
【问题讨论】:
-
除了添加另一列以使索引真正唯一之外,我没有看到其他解决方案。这对你来说是个问题吗? (尽量选择一列尽可能小的索引)
-
嘿@SandraRossi。目标是使
RECORD_KEY单独成为一个唯一的列。 -
为什么要专注于让它绝对独一无二?我发现在不受您的责任和控制的系统中执行规则是一个苛刻的想法。更好地定义关键“不唯一”。我认为与唯一索引相比,非唯一索引不会显着减慢处理速度。
-
嘿@SandraRossi。此列表示记录的标识。我们想将约束设置在最低级别,即 DB 级别。
-
@Dorad - 如果它是记录身份,那么区分记录肯定应该是唯一的......
标签: constraints sap hana unique-constraint