尝试在 Microsoft Dynamics GP 中发布分析会计事务或保存主记录时出错:无法在对象“AAGXXXXX”中插入重复密钥
本文提供了在 Microsoft Dynamics GP 中发布分析会计事务或保存主记录时发生的错误的解决方案。
适用于: Microsoft Dynamics GP
原始 KB 编号: 897280
症状
尝试在 Microsoft Dynamics GP 中发布分析会计事务时,可能会收到以下错误消息:
[Microsoft][ODBC SQL Server驱动程序][SQL Server]违反 PRIMARY KEY 约束“PKAAG30000”,无法在对象“AAG30003”中插入重复键
注意
在此错误消息 中,AAG30000 是表的占位符。 单词“contraint”是“约束”的拼写错误。
收到的实际错误消息可能包含以下表之一:
- 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
原因
出现此问题的原因是,AAG00102表中 (aaTableID) 指示的下一个可用值 (aaRowID) 已在适用的表 (或子表系列) 中使用。
例如,AAG00102表中的“30000”表将查看AAG30000、AAG30001、AAG30002和AAG30003表,因此请务必为适用的表检查系列中的所有表。
解决方案
若要解决此问题,请使用以下方法之一,将 AA 表 (和子表中) 的最高使用值与存储在 AAG00102 表中的下一个可用值进行比较。
注意
在按照本文中的说明操作之前,请确保拥有数据库的完整备份副本,可在出现问题时还原该副本。
方法 1:使用 SQL 脚本更新大多数 AA 表AAG00102中的值
可以使用下面的链接下载 SQL 脚本,并在 SQL Server Management Studio中针对公司数据库运行该脚本,以自动更新存储在 AAG00102 表中的下一个可用数字,而与 AA 表中最后使用的值相比。 该脚本将查看下表:
AAG10000、AAG20000、AAG30000、AAG00201、AAG00400、AAG00401、AAG00500、AAG00600、AAG00900和AAG00903
因此,它查看大多数 AA 表,但不是全部,而不是序列的子表。
方法 2:手动方法,一次研究和更新一个 AA 表的 AAG00102 值
打开 SQL Server Management Studio。 为此,请单击“开始”,指向“程序”,指向“Microsoft SQL Server版本”,然后单击“SQL Server Management Studio”。
在“连接到SQL Server”窗口中,使用 sa 密码登录到 SQL Server Management Studio。
单击“新建查询”图标可打开查询窗口,并在查询窗口中复制或键入以下脚本。 针对公司数据库执行。
select MAX (aaGLHdrID) from AAG30000 */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
请注意查询结果,该结果将显示表中上次使用的最高值。 (如果表包含子表,请确保检查这些子表中上次使用的值的最高值。)
在查询窗口中键入以下脚本,然后针对 Dynamics 数据库执行:
select * from AAG00102 where CMPANYID = 'nnn'
在此查询中,将 nnn 占位符替换为公司 ID。 若要查找公司 ID,请在查询窗口中键入以下查询。
select * from SY01500
在窗口顶部的列表中选择 DYNAMICS 数据库,然后按 F5。
验证 aaTableID 值 30000 (或相应表) 的 aaRowID 字段中的值是否等于或大于在步骤 4 中记录的值。
使用以下脚本更新值。 为此,请在查询窗口中键入以下脚本,然后按 F5。
update aag00102 set aaROWID = 'yyyy' where aaTableID = 30000 and CMPANYID = 'zzz'
注意
在此脚本中,将 yyyy 占位符替换为步骤 4 中记录的值。 将 zzz 占位符替换为公司 ID。 此外,将 aaTableID 替换为相应的表。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈