Fehler beim Versuch, Analytische Buchhaltungstransaktionen zu veröffentlichen oder einen Masterdatensatz in Microsoft Dynamics GP zu speichern: Es kann kein doppelter Schlüssel in das Objekt "AAGXXXXX" eingefügt werden.

Dieser Artikel bietet eine Lösung für einen Fehler, der auftritt, wenn Sie Analytische Buchhaltungstransaktionen veröffentlichen oder einen Hauptdatensatz in Microsoft Dynamics GP speichern.

Gilt für: Microsoft Dynamics GP
Ursprüngliche KB-Nummer: 897280

Symptome

Wenn Sie versuchen, Analytische Buchhaltungstransaktionen in Microsoft Dynamics GP zu veröffentlichen, erhalten Sie möglicherweise die folgende Fehlermeldung:

[Microsoft] [ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY contraint 'PKAAG30000', cannot insert duplicate key in object 'AAG30003'

Hinweis

In dieser Fehlermeldung ist AAG30000 ein Platzhalter für die Tabelle. Das Wort "contraint" ist eine Falschschreibung von "Einschränkung".

Die tatsächliche Fehlermeldung, die Sie erhalten, kann eine der folgenden Tabellen enthalten:

  • 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

Ursache

Dieses Problem tritt auf, weil der nächste verfügbare Wert (aaRowID) für diese Tabelle (aaTableID) in der AAG00102 Tabelle bereits in der entsprechenden Tabelle (oder einer Reihe von Untertabellen) verwendet wurde.

Die Tabelle "30000" in der AAG00102 Tabelle betrachtet beispielsweise die Tabellen AAG30000, AAG30001, AAG30002 und AAG30003. Achten Sie daher darauf, alle Tabellen in der Reihe auf die entsprechende Tabelle zu überprüfen.

Lösung

Um dieses Problem zu umgehen, verwenden Sie eine der folgenden Methoden, um den höchsten verwendeten Wert in der AA-Tabelle (und Untertabellen) mit dem nächsten verfügbaren Wert zu vergleichen, der in der AAG00102 Tabelle gespeichert ist.

Hinweis

Bevor Sie die Anweisungen in diesem Artikel befolgen, stellen Sie sicher, dass Sie über eine vollständige Sicherungskopie der Datenbank verfügen, die Sie wiederherstellen können, wenn ein Problem auftritt.

Methode 1: Verwenden von SQL-Skript zum Aktualisieren von Werten in AAG00102 für die meisten AA-Tabellen

Sie können ein SQL-Skript über den folgenden Link herunterladen und in SQL Server Management Studio für die Unternehmensdatenbank ausführen, um die nächste verfügbare Zahl, die in der AAG00102 Tabelle gespeichert ist, automatisch im Vergleich zum zuletzt verwendeten Wert in der AA-Tabelle zu aktualisieren. Das Skript untersucht die folgenden Tabellen:

AAG10000, AAG20000, AAG30000, AAG00201, AAG00400, AAG00401, AAG00500, AAG00600, AAG00900 und AAG00903

Daher werden die meisten AA-Tabellen, aber nicht alle und keine Untertabellen für eine Reihe betrachtet.

Methode 2: Manuelle Methode zum Recherchieren und Aktualisieren des Werts in AAG00102 für jeweils eine AA-Tabelle

  1. Öffnen Sie SQL Server Management Studio. Klicken Sie dazu auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft SQL Server Version, und klicken Sie dann auf SQL Server Management Studio.

  2. Melden Sie sich im Fenster Mit SQL Server verbinden bei SQL Server Management Studio an, indem Sie Ihr sa-Kennwort verwenden.

  3. Klicken Sie auf das Symbol Neue Abfrage, um ein Abfragefenster zu öffnen, und kopieren oder geben Sie das folgende Skript in das Abfragefenster ein. Führen Sie für die Unternehmensdatenbank aus.

    select MAX (aaGLHdrID) from AAG30000
    */Insert in the appropriate column/table for the aaGLHdrID and AAG30000 placeholders in the script.
    
  4. Beachten Sie die Abfrageergebnisse, die den höchsten Zuletzt in der Tabelle verwendeten Wert anzeigen. (Wenn die Tabelle Untertabellen enthält, überprüfen Sie auch den höchsten zuletzt verwendeten Wert in diesen.)

  5. Geben Sie im Abfragefenster das folgende Skript ein, und führen Sie es für die Dynamics-Datenbank aus:

    select * from AAG00102 where CMPANYID = 'nnn'
    

    Ersetzen Sie in dieser Abfrage den Platzhalter nnn durch die Unternehmens-ID. Um die Unternehmens-ID zu ermitteln, geben Sie die folgende Abfrage in das Abfragefenster ein.

    select * from SY01500
    

    Wählen Sie die DYNAMICS-Datenbank in der Liste oben im Fenster aus, und drücken Sie dann F5.

  6. Überprüfen Sie, ob der Wert im Feld aaRowID für den aaTableID-Wert von 30000 (oder der entsprechenden Tabelle) gleich oder größer als der Wert ist, den Sie in Schritt 4 notiert haben.

  7. Verwenden Sie das folgende Skript, um den Wert zu aktualisieren. Geben Sie dazu das unten stehende Skript im Abfragefenster ein, und drücken Sie dann F5.

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

    Hinweis

    Ersetzen Sie in diesem Skript den Platzhalter jjjj durch den Wert, den Sie in Schritt 4 notiert haben. Ersetzen Sie den zzz-Platzhalter durch die Unternehmens-ID. Ersetzen Sie außerdem die aaTableID durch die entsprechende Tabelle.