当您尝试分析会计交易记录过帐或保存主记录在 Microsoft Dynamics GP 的错误消息:"无法插入重复键在对象 'AAGXXXXX'"

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 897280
症状
当您尝试在 Microsoft Dynamics GP 中发布的分析会计交易记录时,您可能会收到以下错误消息:

[] Microsoft[ODBC SQL Server 驱动程序][SQL Server]主键约束的冲突PKAAG30000',不能在对象中插入重复键AAG30003'

注意
在此错误消息, AAG30000 是一个占位符表。单词"约束"为有拼写错误的"约束"。

您将收到实际的错误消息可能包含下表中的一个:
  • AAG00103
  • AAG00500
  • AAG00600
  • AAG00601
  • AAG00602
  • AAG00603
  • AAG00400
  • AAG00401
  • AAG00201
  • AAG00310
  • AAG00900
  • AAG00901
  • AAG00902
  • AAG00903
  • AAG10000
  • AAG10001
  • AAG10002
  • AAG10003
  • AAG20000
  • AAG20001
  • AAG20002
  • AAG20003
  • AAG30000
  • AAG30001
  • AAG30002
  • AAG30003
原因
发生此问题是因为已适用的表 (或系列子表) 中使用此表 (aaTableID) 的 AAG00102 表中所示的下一个可用值 (aaRowID)。

例如,AAG00102 表中的"30000"表将看 AAG30000、 AAG30001、 AAG30002 和 AAG30003 表格,因此请务必检查适用的表的系列中的所有表。



解决方案
若要变通解决此问题,请使用下下面的方法之一,比较 AA 表 (子表) 中的最大使用的值对照存储在 AAG00102 表中的下一个可用值。

注意: 在按照本文中的说明进行操作之前,请确保您有一份如果出现问题,可以还原该数据库的完整备份。

方法 1-使用 SQL 脚本来更新的大多数 AA 表 AAG00102 中的值

您可以下载 SQL 脚本使用下面的链接,并对公司数据库运行 SQL Server 管理 Studio 中自动更新存储在 AAG00102 表的最后一个在比较中的下一个可用编号值表中使用 AA。该脚本会看下表: AAG10000、 AAG20000、 AAG30000、 AAG00201、 AAG00400、 AAG00401、 AAG00500、 AAG00600、 AAG00900 和 AAG00903。因此它在大部分的 AA 表中,但不是全部,看起来并没有一系列的子表。要获取其脚本,请访问下面的 Microsoft 网站:

https://mbs.microsoft.com/Files/customer/GP/Downloads/ServicePacks/AA_Update_AAG00102.sql

方法 2-手动方法中 AAG00102 的研究和更新值为一个 AA 表一次

  1. 打开 SQL Server 管理 Studio。为此,单击开始、 指向程序、 指向Microsoft SQL Server 版本,然后单击SQL Server 管理 Studio
  2. 连接到 SQL Server窗口使用登录到 SQL Server 管理 Studio sa 密码。
  3. 在单击 新建查询 图标,以打开查询窗口和复制或查询窗口中键入以下脚本。对公司数据库执行。
    select MAX (aaGLHdrID) from AAG30000*/Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
  4. 注意这将显示上次使用的最大值在表中的查询结果。(如果表中有子表,请务必检查最高最后值中使用的那些也。)
  5. 在查询窗口中键入以下脚本并执行针对动态数据库:
    select * from AAG00102 where CMPANYID = 'nnn'
    注意: 在此查询中,替换 nnn 占位符的公司 id。若要查找公司 ID,请在查询窗口中键入以下查询。
    select * from SY01500
    顶部的窗口中,从列表中选择的动态数据库,然后按 f5 键。
  6. 请验证30000 (或相应的表) 的aaTableID值的aaRowID字段中的值等于或大于您在步骤 4 中记下的值。
  7. 使用下面的脚本来更新的值。若要执行此操作,请在查询窗口中,键入下面的脚本,然后按 F5。
    update aag00102 set aaROWID = 'yyyy' where aaTableID = 30000 and CMPANYID = 'zzz'
    注意: 在此脚本中,替换 yyyy 使用您在步骤 4 中记下的值的占位符。替换 zzz 占位符的公司 id。此外将 aaTableID 替换相应的表中。
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。

警告:本文已自动翻译

属性

文章 ID:897280 - 上次审阅时间:10/23/2015 06:11:00 - 修订版本: 0.5

Microsoft Dynamics GP 2015, Microsoft Dynamics GP 2013, Microsoft Dynamics GP 2010, Microsoft Dynamics GP 10.0

  • kberrmsg kbmbsmigrate kbbug kbmt KB897280 KbMtzh
反馈