2016-08-09 55 views
0

Ich versuche, eine Append-Abfrage auszuführen, aber ich bekomme wichtige Verstöße, ich denke, DelledningID ist der Schuldige, aber nicht sicher, wie dies zu beheben, da ich nicht berühren sollte oder ProjektID.Zugriffstastenverletzungen in Append-Abfrage

INSERT INTO ProjektDelledning (ProjektID, DelledningID, SaneringsmetKode, DatoOprettet, DatoOpdateret) 
SELECT ProjektDelledning.ProjektID, ProjektDelledning.DelledningID, NySaneringsData.SaneringsmetodeKode AS SaneringsmetKode, IIf([ProjektDelledning].[DatoOprettet] Is Null,Date$()+" "+Time$(),[ProjektDelledning].[DatoOprettet]) AS DatoOprettet, IIf([ProjektDelledning].[SaneringsmetKode] Is Null,Date$()+" "+Time$(),[ProjektDelledning].[DatoOpdateret]) AS DatoOpdateret 
FROM NySaneringsData LEFT JOIN ProjektDelledning ON NySaneringsData.DelledningsID = ProjektDelledning.DelledningID 
WHERE (((Exists (SELECT * FROM ProjektDelledning WHERE ProjektDelledning.SaneringsmetKode = NySaneringsData.SaneringsmetodeKode AND ProjektDelledning.DelledningID = NySaneringsData.DelledningsID))=False)); 

Wie kann ich das beheben? Ich habe versucht, Projekt ID und DelledningID aus der Abfrage zu entfernen, aber das gibt stattdessen einen Validierungsfehler.

Key violation and tables

+0

Sie versuchen, Kombinationen von ProjektID und DelledningID einzufügen, die bereits vorhanden sind. Was repräsentiert Ihr Tisch ** ProjektDelledning **? – Rene

+0

Wenn durch darstellen Sie meine, was es enthält, ProjectID (ProjektID) Nummer, die aus einer anderen Tabelle kommt, eine PipeID (DelledningID) aus einer anderen Tabelle, eine Reparaturnummer (SaneringmetKode), die mit Werten basierend auf der Tabelle NySaningsData angefügt werden muss, Der Join ist auf der delledningID und muss die Datumszeit auf DatoOpdateret aktualisieren. – FoolzRailer

+0

Es bezieht sich auf eine Projekttabelle. Diese hübsche Farbe screendump zeigt, wie, denke ich :) [TableRelationship] (http://imgur.com/4FiM8zH) – FoolzRailer

Antwort

0

Sie nähern sich falsch diese. Sie können keine neuen Datensätze in das ProjektDelledning ohne eine "gültige" Projekt-ID einfügen. Sie haben keine gültige Projekt-ID und Sie können sie nicht aus vorhandenen Datensätzen stehlen, da Sie dann doppelte Datensätze erstellen und den Validierungsfehler treffen würden.

Angenommen, Ihre NySaningsData hat nur eine eindeutige delledningid, versuchen Sie die Aktualisierung der ProjektDelledning Tabelle. etwas wie.

update 
    ProjektDelledning INNER JOIN ProjektDelledning ON NySaneringsData.DelledningsID = ProjektDelledning.DelledningID 
set 
    ProjektDelledning.SaneringsmetKode = NySaneringsData.SaneringsmetKode , 
    ProjektDelledning.DatoOprettet = nz(ProjektDelledning.DatoOprettet, now()), 
    ProjektDelledning.DatoOpdateret = nz(ProjektDelledning.DatoOpdateret, now()) 
WHERE (if any further conditions needed); 

Wenn NySaningsData doppelte delledningsid hat, dann müssen Sie sicherstellen, welchen Datensatz Sie übernehmen möchten.

+0

Danke für die Hilfe Krish. NySaneringData hat dieselbe DelledningID wie ProjektDelledning. Ist es also noch möglich, die Datensätze hinzuzufügen? Der Code, den Sie angezeigt haben, gibt mir einen Syntaxfehler beim Join. – FoolzRailer

+0

Ich denke, dass Sie mehr über Rational-Datenbank-Design lesen müssen. Ihr db-Design sagt uns, um einen neuen Datensatz in "ProjektDelledning" zu erstellen, benötigen Sie eine gültige project_id und delledning_id. Du bekommst "NEW" delledning_id von NySaneringData, woher würdest du eine "NEUE" project_id bekommen? Sie können keine doppelten Datensätze haben, daher funktioniert das Hinzufügen nicht. Nur das Update funktioniert. @FoolzRailer –

+0

ja der innere Join sollte ProjektDellingning innerer Join sein NySaneringSData @FoolzRailer –