数据库中已经有一个名为 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 上解决此问题。
我已经尝试过的:
从 SQL Server Management Studio 中删除了 table 然后
从 AOT 同步但错误仍然存在。
试图从 SSMS 中删除索引名称:
DROP INDEX I_100013RECID ON [ACOCOSTCENTERATTRIBUTEVALUE_BR]
但是出现这个错误:
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
- 在检查 sys.indexes 时有一个索引名称为:
- 但是索引在table中不可见:
编辑 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
是否在您的环境中使用过?我想不会,除非你与巴西公司合作。
我建议你
- 暂时将 table 上的
ConfigurationKey
从 LedgerBasic 更改为 SysDeletedObjects63。
- 右键单击 table,单击“同步”。它将从 SQL 数据库中删除 table。
- 再次尝试运行全数据库同步,确保没有错误。
- 从您正在工作的层中删除
ACOCostCenterAttributeValue_BR
table。它将使用 ConfigurationKey
= LedgerBasic 恢复 table 的 SYS 层版本。
- 右键单击 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。
同步 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 上解决此问题。
我已经尝试过的:
从 SQL Server Management Studio 中删除了 table 然后 从 AOT 同步但错误仍然存在。
试图从 SSMS 中删除索引名称:
DROP INDEX I_100013RECID ON [ACOCOSTCENTERATTRIBUTEVALUE_BR]
但是出现这个错误:
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
- 在检查 sys.indexes 时有一个索引名称为:
- 但是索引在table中不可见:
编辑 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
是否在您的环境中使用过?我想不会,除非你与巴西公司合作。
我建议你
- 暂时将 table 上的
ConfigurationKey
从 LedgerBasic 更改为 SysDeletedObjects63。 - 右键单击 table,单击“同步”。它将从 SQL 数据库中删除 table。
- 再次尝试运行全数据库同步,确保没有错误。
- 从您正在工作的层中删除
ACOCostCenterAttributeValue_BR
table。它将使用ConfigurationKey
= LedgerBasic 恢复 table 的 SYS 层版本。 - 右键单击 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。