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

时间:2018-05-15 11:47:27

标签: axapta dynamics-ax-2012 dynamics-ax-2012-r2 dynamics-ax-2012-r3

我正在尝试将我的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中这个索引不存在,所以在有效数据升级之前我不能暂时使其不唯一。 该表支持继承,但不会从任何内容扩展。 好像内核本身正在尝试添加此索引。 删除记录不是一种选择,因为我会丢失数据。

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

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

2 个答案:

答案 0 :(得分:1)

我找到了这个问题的原因,并且这是怀疑的。 我在升级前的环境中检查了AOT,但它也没有出现。

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

当您在派生表上创建索引时,kernell会在某个时刻尝试在父表上添加索引。这是因为虽然表继承中的表在AOT中显示为单独的表对象,但它们实际上(在AX 2012 R2和更高版本中)是数据库中的单个表。 MartinDadáb撰写的优秀文章Queries to tables with inheritance建议进一步阅读。

已编辑:我为此制作了一个预同步脚本,并且必须在以后的数据升级过程中解决唯一索引问题

答案 1 :(得分:0)

  

就好像内核本身正在尝试添加此索引

不)

  • 表:AGREEMENTHEADER
  • 指数:PURCHNUMBERSEQUENCEIDX
  • 重复记录的记录是5637144576

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

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