新列已添加到现有数据库表(PA0023
)。
DB: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!= distanceCount。
在该列中没有具有相同值的行。有些行具有空白值,这些行被视为重复项。在开发环境中替换了空白之后,索引创建良好。在生产中不太可能,因为在该新字段中有许多记录为空值。
所以我的问题是:有没有一种方法可以创建唯一约束而不替换空白?
答案 0 :(得分:1)
如果现有数据不能提供唯一性,则不能创建唯一性约束。因此,如果键具有多个NULL值,则不能执行此操作。创建约束之前,您需要确保数据是唯一的。
这是正常的数据库实践,不是特定于HANA的。
答案 1 :(得分:0)
虽然复合主键不能包含任何可空列,但允许使用可空列定义复合唯一/候选键。唯一的黄金法则是,在添加或更新记录时,如果唯一键中的任何列包含 NULL 值,则索引条目不写入数据库。
MySQL 默认这样做。 如果您将“WHERE columnX IS NOT NULL”添加到键的定义中,SQL Server 将执行此操作。 ORACLE 与 SQL Server 相同,只是语法更复杂。