Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verletzung des PRIMARY KEY-Einschränkungsfehlers SQL

Per Design ist Ihre Tabelle [cresql].[dbo].[AR_Transactions] soll nur einen Wert für den Primärschlüssel enthalten - in Ihrem Fall scheint dies eine Kombination von Spalten zu sein, aus denen dieser PK besteht.

Dies ist kein SQL-Problem, sondern scheint ein Designkonzept zu sein.

Sie sollten herausfinden, aus welcher Schlüsselkombination Ihr Primärschlüssel besteht - es kann sein, dass das Design besagt, dass Sie diese Kombination einmal einfügen und später aktualisieren können (obwohl ich dies nicht als gutes Design betrachten würde).

BEARBEITEN

Da Trans_Id die PK ist und Sie diese Spalte nicht in Ihrer Einfügung verwenden, wird sie entweder als IDENTITY, als DEFAULT (brrrrr) oder mit einem TRIGGER eingefügt.

IDENTITÄT: Überprüfen Sie, ob die IDENTITY-Spezifikation vermasselt ist. Wenn ja, einfach zurücksetzen. Hier ist, wie man Wie kann ich eine Identitätsspalte in einer T-SQL-Tabellenvariablen neu setzen?

STANDARD: Dies ist eine seltsame Wahl, und Sie müssen möglicherweise denjenigen fragen, der die Datenbank entwickelt hat, die Dokumentation lesen oder es einfach selbst herausfinden. Auf jeden Fall ist dies eine sehr ungewöhnliche Wahl.

AUSLÖSER: Finden Sie den Auslöser und lesen Sie den Code durch, um zu sehen, was er tut. So finden Sie eine Liste von Triggern Was ist der einfachste Weg, um zu prüfen, ob ein Trigger in SQL Server existiert?

Alternatives Szenario:

Es könnte einen Trigger geben, der in eine AUDIT-Tabelle einfügt, die das Problem haben könnte. Überprüfen Sie, ob die Tabelle andere Trigger hat und sehen Sie, was sie tun.