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

There is already an object named I_XXXRECID in the database

同步 DataDictionary 时出现此错误。

SQL error description: [Microsoft][SQL Server Native Client 11.0][SQL Server]There is already an object named 'I_100013RECID' in the database.

SQL statement: ALTER TABLE "DBO".ACOCOSTCENTERATTRIBUTEVALUE_BR ADD CONSTRAINT I_100013RECID PRIMARY KEY NONCLUSTERED (RECID)

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

我已经尝试过的:

Cannot drop the index 'ACOCOSTCENTERATTRIBUTEVALUE_BR.I_100013RECID', because it does not exist or you do not have permission.

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

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

输出:

   dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR

编辑 1:附加信息

table ID 没有冲突:

Table 来自 SSMS:

正在从 SSMS 中删除 table:

在 3 个索引中,当我从 SSMS 中删除 table 时,为什么 2 个索引没有被删除?为什么只有1个被删除?同步后检查下面的 3 个索引。如何摆脱这些? SSMS 不允许我删除它,提示“无法修改目录”。我可以尝试通过更改主数据的设置来删除它吗?我不确定与此 table 相关的所有 table 都包含在目录中。

正在从 AOT 再次同步:

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

Unique Constrains自动创建索引: https://www.mssqltips.com/sqlservertip/4270/difference-between-sql-server-unique-indexes-and-unique-constraints/

这个问题向您展示了获取所有约束的不同方法: SQL Server 2008- Get table constraints

table ACOCostCenterAttributeValue_BR 是否在您的环境中使用过?我想不会,除非你与巴西公司合作。

我建议你

  1. 暂时将 table 上的 ConfigurationKey 从 LedgerBasic 更改为 SysDeletedObjects63。
  2. 右键单击 table,单击“同步”。它将从 SQL 数据库中删除 table。
  3. 再次尝试运行全数据库同步,确保没有错误。
  4. 从您正在工作的层中删除 ACOCostCenterAttributeValue_BR table。它将使用 ConfigurationKey = LedgerBasic 恢复 table 的 SYS 层版本。
  5. 右键单击 table,单击“同步”。它将在 SQL 数据库中创建 table。如果此时您开始收到数据库同步错误,则意味着您的数据库中出现了其他问题,例如另一个 table 有一个同名索引 (I_100013RECID) 或类似名称。

终于找到解决办法了:

问题是有 2 tables

[dbo].[ACOCOSTCENTERATTRIBUTEVALUE_BR]

[dbo].[dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR]

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

我删除了另一个 table [dbo].[dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR](我什至不知道它的存在,因为 table 是按字母顺序排列的,我是仅查看来自 ssms 的第一个 table),然后再次同步并成功。

第二个 table 的名称中有前缀 "dbo."。我完全不知道它是如何悄悄进入的,因为我以前从未接触过这个 table。