Ich habe eine Liste von IDs identifiziert, die in einer Tabelle Transactions
erscheinen, die nicht in der Kundenkontentabelle enthalten sind. Ich habe mit der folgenden Abfrage erreicht dies, die etwa 14.000 Zeilen zurückgibt:Verwenden der NOT EXISTS-Abfrage zum Einfügen eindeutiger Kunden-IDs verletzt Primärschlüsseleinschränkung
select SurrID
from tblTransactions t
where not exists (select *
from tblCustomerAccounts ca
where t.SurrID = ca.SurrID)
Allerdings, wenn ich das Präfix dann diese Abfrage mit einer INSRT INTO
Anweisung, meine Kundenkonten Tabelle anhängen, erhalte ich einen Primärschlüssel Verletzung. Aus Gründen der Übersichtlichkeit ist dies meine INSERT
query:
insert into tblCustomerAccounts(SurrID)
select SurrID
from tblTransactions t
where not exists (select *
from tblCustomerAccounts ca
where t.SurrID = ca.SurrID)
Dies ist die Fehlermeldung:
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK_tblCustomerAccounts_SurrID'. Cannot insert duplicate key in object 'dbo.tblCustomerAccounts'. The duplicate key value is (2205784830001).
Der Primärschlüssel in den Kundenkonto Tabelle ist nur auf die SurrID
Spalte (keine Composite-Taste). Wenn ich nach dem doppelten Schlüsselwert in der Kundenkontentabelle gesucht habe, existiert er nicht.
Von was ich verstehe, sollte meine ursprüngliche Abfrage mir alle SurrIDs in der Transactions
Tabelle anzeigen, die nicht in der Kundenkontentabelle vorhanden sind. Daher sollte die INSERT
-Anweisung die fehlenden SurrIDs an die Kundenkontentabelle anhängen. Ist mein Verständnis dieser Fragen falsch oder könnte etwas anderes passieren?
Ist die Tabelle Transaktionen auch auf SurrID einzigartig? – joop
Nein. Jede 'SurrID' wird mehrmals in der' transactions' Tabelle angezeigt. –
Und Sie möchten sie alle, einschließlich der Duplikate einfügen. – joop