2016-11-01 2 views
0

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?

+0

Ist die Tabelle Transaktionen auch auf SurrID einzigartig? – joop

+0

Nein. Jede 'SurrID' wird mehrmals in der' transactions' Tabelle angezeigt. –

+1

Und Sie möchten sie alle, einschließlich der Duplikate einfügen. – joop

Antwort

0

Einfacher Fehler! Muss in der Auswahlzeile Distinct enthalten sein. Für diejenigen von uns, die keine erfahrenen Profis sind, ist die Abfrage, die ich brauchte:

insert into tblCustomerAccounts(SurrID) 
select Distinct SurrID 
from tblTransactions t 
where not exists (
        select * 
        from tblCustomerAccounts ca 
        where t.SurrID = ca.SurrID 
       ) 
Verwandte Themen