2017-07-22 3 views
0

Ich habe dieses Update-Skript, in dem ich neue Daten in meine DB laden oder vorhandene Daten aktualisieren. Aber ich bekomme diese Fehler.MERGE-Konflikt mit der FOREIGN KEY-Einschränkung

The MERGE statement conflicted with the FOREIGN KEY constraint 
"FK_JW_MaterialData2PL_cMat_MaterialText". 
The conflict occurred in database "TEST", table "dbo.JW_MaterialData", column 'camosGUID'. 

und

The MERGE statement conflicted with the FOREIGN KEY constraint 
"FK_JW_MaterialData_cMat_Material". The conflict occurred in 
database "TEST", table "dbo.cMat_Material", column 'camosGUID'. 

Das sind die Aussagen, die relevant sind. Aber natürlich gibt es viel mehr MERGE Aussagen mit viel mehr Tabellen.

MERGE INTO [dbo].[JW_MaterialData2PL] ON camosGUID 
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

MERGE INTO [dbo].[cMat_Material] ON camosGUID 
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

MERGE INTO [dbo].[JW_MaterialData] ON camosGUID 
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

FK_JW_MaterialData2PL_cMat_MaterialText und FK_JW_MaterialData_cMat_Material sind ON UPDATE CASCADE und ON DELETE CASCADE gesetzt.

Vielleicht ist dies ein Problem der Reihenfolge, die ich die MERGE Aussagen setzen? Oder weißt du, was der Grund sein könnte?

Und noch eine Frage: Wenn ich das Skript erneut ausführen, gibt es keine Fehler. Ist es also in Ordnung, den Test zweimal auszuführen oder könnte das in der Zukunft zu Problemen führen?

+1

Bestellen Sie Ihr 'merge' auf Abhängigkeit beruhen. z.B. 'cMat_Material' sollte nach' JW_MaterialData' basierend auf Ihrer Fehlermeldung stehen. – SqlZim

+0

ja, ich denke, die richtige Reihenfolge hat das Problem gelöst. 'cMat_Material'>' JW_MaterialData'> 'cMat_PriceList'>' JW_MaterialData2PL'. – user1673665

Antwort

0

Es war notwendig, die MERGE Anweisungen in die richtige Reihenfolge zu bringen, indem Sie die Abhängigkeiten der Tabellen betrachten.

  1. cMat_Material
  2. JW_MaterialData
  3. JW_MaterialData2PL
Verwandte Themen