ax2012 r3升级内核尝试创建ghost唯一索引

ax2012 r3 upgrade kernel tries to create ghost unique index

我正在尝试将我的 AX2012FP 升级到 R3 版本,但在此过程中我遇到了同步错误(所以就在预同步之后)。 错误之一如下:

SQL error description: [Microsoft][SQL Server Native Client 11.0][SQL Server]
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.AGREEMENTHEADER' and the index name 'I_4902PURCHNUMBERSEQUENCEIDX'. The duplicate key value is (5637144576, , 0, 4902).

这里的问题是,如果我在 AOT 中检查并且在 SQL 中这个索引不存在,那么在有效数据升级之前我不能暂时使它不唯一。 table 支持继承但不扩展任何东西。 就好像内核本身正在尝试添加这个索引。 删除记录不是一种选择,因为我会丢失数据。

我正在遵循官方指南,该指南告诉我使用数据升级清单进行就地数据升级:

https://technet.microsoft.com/en-us/library/jj733502.aspx

It is as if the kernel itself is trying to add this index

否)

  • Table:协议标题
  • 索引:PURCHNUMBERSEQUENCEIDX
  • 重复记录的 RecId 为 5637144576

您无法在 SQL 上找到该索引,因为它在 Axapta 中被禁用。打开 AOT 并探索 AOT table、索引和 属性。尝试通过 AOT 在您的 AX2012FP 上启用此索引 属性。

如果您的问题没有解决,那么安装一个新的 AX2012R3 实例并探索 AOT 并比较您的 Axapta 和新的 AX2012R3 中的 AOT 索引。在升级前修改您的 axapta 以消除索引差异。

这个问题的原因我已经找到了,果然是疑似的。 我在升级前的环境中检查了 AOT,它也不存在。

因此在搜索时,我让我的客户搜索该索引上的所有 table,然后我找到了使用该索引的派生 table。 然后我让它不是唯一的,我现在可以继续这个过程了。

显然,当您在派生 table 上创建索引时,内核将在某个时候尝试在父 table 上添加索引。这是因为虽然来自 table 继承的 tables 在 AOT 中显示为单独的 table 对象,但它们实际上(在 AX 2012 R2 及更高版本中)是单个 table 在数据库中。推荐阅读 Martin Dráb 的优秀文章 Queries to tables with inheritance 以进一步阅读。

已编辑:我为此制作了一个预同步脚本,稍后在数据升级期间必须解决唯一索引问题