数据库中已有一个名为I_XXXRECID的对象

问题描述 投票:2回答:3

同步DataDictionary时会出现此错误。

SQL错误说明:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]数据库中已存在名为“I_100013RECID”的对象。

SQL语句:ALTER TABLE“DBO”.ACOCOSTCENTERATTRIBUTEVALUE_BR ADD CONSTRAINT I_100013RECID PRIMARY KEY NONCLUSTERED(RECID)

我复制了整个业务和代码数据库并创建了新的AX Env。我不确定源Env上是否存在此错误,但我想在新的环境中解决此问题。

我已经尝试过了:

  • 从SQL Server Management Studio中删除该表,然后从AOT中删除,但错误仍然存​​在。
  • 试图从SSMS中删除索引名称: DROP INDEX I_100013RECID ON [ACOCOSTCENTERATTRIBUTEVALUE_BR] 但是得到这个错误:

无法删除索引'ACOCOSTCENTERATTRIBUTEVALUE_BR.I_100013RECID',因为它不存在或您没有权限。

但是在查询索引时,它显示了正确的表:

select object_name(object_id) from sys.indexes WHERE name =  'I_100013RECID'

输出:

   dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR
  • 在检查sys.indexes时,有一个这个名称的索引:

enter image description here

  • 但索引在表中不可见:

enter image description here

EDIT 1: Additional Info

表ID中没有冲突:

enter image description here

SSMS表:

enter image description here

从SSMS删除表:

enter image description here

当我从SSMS删除表时,为什么2个索引没有被删除?为什么只有1被删除?同步后检查下面的3个索引。如何摆脱这些? SSMS不会让我删除它,告诉'目录无法修改'。我可以尝试通过更改主数据的设置来删除它吗?我不确定目录中是否填充了与此表相关的所有表。

从AOT再次同步:

enter image description here

sql-server sql-server-2012 axapta dynamics-ax-2012 dynamics-ax-2012-r3
3个回答
2
投票

ACOCostCenterAttributeValue_BR是否在您的环境中使用?我不认为,除非你和巴西公司合作。

我建议你

  1. 暂时将表格中的ConfigurationKey从LedgerBasic更改为SysDeletedObjects63。
  2. 右键单击该表,单击“同步”。它将从SQL DB中删除该表。
  3. 尝试再次运行完整数据库同步,确保没有错误。
  4. 从您正在使用的图层中删除ACOCostCenterAttributeValue_BR表。它将使用ConfigurationKey = LedgerBasic恢复表的SYS图层版本。
  5. 右键单击该表,单击“同步”。它将在SQL DB中创建表。如果您在此时开始收到数据库同步错误,则表示您的数据库中存在其他错误,例如另一个表有一个同名的索引(I_100013RECID)或类似的东西。

1
投票

约束名称在数据库中必须是唯一的:Can there be constraints with the same name in a DB?

Unique Constraint自动创建索引:qazxsw poi

这些问题向您展示了获得所有约束的不同方法:https://www.mssqltips.com/sqlservertip/4270/difference-between-sql-server-unique-indexes-and-unique-constraints/


1
投票

最后我得到了解决方案:

问题是有2个表

[DBO]。[ACOCOSTCENTERATTRIBUTEVALUE_BR]

[DBO]。[dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR]

我从ssms中删除了[dbo]。[ACOCOSTCENTERATTRIBUTEVALUE_BR]和从AOT同步,因此错误仍然存​​在。

我放弃了另一个表[dbo]。[dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR](我甚至不知道它存在,因为表格是按字母顺序排列的,我只是在第一张表中查看)来自ssms,然后再次同步,它是成功的。

第二个表的前缀为“dbo”。在它的名字。我绝对不知道它是如何悄悄进入的,因为我甚至没有触及过此表。

© www.soinside.com 2019 - 2024. All rights reserved.