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

时间:2019-04-28 13:30:15

标签: sql-server sql-server-2012 axapta dynamics-ax-2012 dynamics-ax-2012-r3

同步DataDictionary时会出现此错误。

  

SQL错误描述:[Microsoft] [SQL Server本机客户端11.0] [SQL   服务器]中已经有一个名为“ I_100013RECID”的对象   数据库。

     

SQL语句:ALTER TABLE“ DBO” .ACOCOSTCENTERATTRIBUTEVALUE_BR添加   CONSTRAINT I_100013RECID主密钥已删除(RECID)

我复制了整个业务和代码数据库,并创建了新的AX 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

编辑1:其他信息

表ID中没有冲突:

enter image description here

来自SSMS的表格:

enter image description here

从SSMS中删除表格:

enter image description here

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

再次从AOT同步:

enter image description here

3 个答案:

答案 0 :(得分:2)

您的环境中是否完全使用了表ACOCostCenterAttributeValue_BR?我认为不会,除非您与巴西公司合作。

我建议您

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

最后我得到了解决方案:

问题在于有2张桌子

[dbo]。[ACOCOSTCENTERATTRIBUTEVALUE_BR]

[dbo]。[dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR]

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

我从ssms中删除了另一个表[dbo]。[dbo.ACOCOSTCENTERATTRIBUTEVALUE_BR](我什至不知道它的存在,因为表是按字母顺序排列的,而我只看第一个表),然后再次进行同步成功了。

第二个表的前缀为“ dbo”。以它的名字。我绝对不知道它是如何爬行的,因为我以前从未接触过这张桌子。