當您嘗試在 Microsoft Dynamics GP 中張貼分析會計交易或儲存主要記錄時發生錯誤:無法在物件 'AAGXXXXX' 中插入重複的密鑰

本文提供當您在 Microsoft Dynamics GP 中張貼分析會計交易或儲存 Master 記錄時所發生錯誤的解決方案。

適用于: Microsoft Dynamics GP
原始 KB 編號: 897280

徵狀

當您嘗試在 Microsoft Dynamics GP 中張貼分析會計交易時,可能會收到下列錯誤訊息:

[Microsoft][ODBC SQL Server Driver][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 中針對公司資料庫執行,以自動更新與 AA 資料表中最後一個使用過的值相較之下,儲存在AAG00102數據表中的下一個可用號碼。 文稿會檢視下列資料表:

AAG10000、AAG20000、AAG30000、AAG00201、AAG00400、AAG00401、AAG00500、AAG00600、AAG00900 和 AAG00903

因此,它會查看大部分的 AA 數據表,但不是所有數據表,而不是數列的子數據表。

方法 2:手動方法,一次針對一個 AA 數據表研究及更新AAG00102中的值

  1. 啟動 SQL Server Management Studio。 若要這樣做,請按兩下 [開始],指向 [程式],指向 [Microsoft SQL Server 版本],然後按兩下 [SQL Server Management Studio]

  2. 在 [連線到 SQL Server] 視窗中,使用您的 sa 密碼登入 SQL Server Management Studio。

  3. 按兩下 [新增查詢] 圖示以開啟查詢視窗,然後在查詢視窗中複製或輸入下列腳本。 針對公司資料庫執行 。

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. 請注意查詢結果,其會顯示上次在數據表中使用的最高值。 (如果數據表有子數據表,請務必檢查這些數據表中最後使用的最高值。)

  5. 在查詢視窗中輸入下列腳本,並針對 Dynamics 資料庫執行:

    select * from AAG00102 where CMPANYID = 'nnn'
    

    在此查詢中,將 nnn 佔位元取代為公司識別碼。 若要尋找公司識別碼,請在查詢視窗中輸入下列查詢。

    select * from SY01500
    

    選取視窗頂端清單中的 DYNAMICS 資料庫,然後按 F5。

  6. 確認 aaTableID 值為 30000 (或適當數據表) 的 aaRowID 欄位中的值等於或大於您在步驟 4 中記下的值。

  7. 使用下列腳本來更新值。 若要這樣做,請在查詢視窗中輸入下列腳本,然後按 F5 鍵。

    update aag00102 set aaROWID = 'yyyy' where aaTableID = 30000 and CMPANYID = 'zzz'
    

    注意事項

    在此腳本中,將 yyyy 佔位元取代為您在步驟4中記下的值。 將 zzz 佔位元元取代為公司標識碼。 也請將 aaTableID 取代為適當的數據表。