![]() |
Datenbank: Firebird • Version: 3 • Zugriff über: flamerobin
Problem mit Merge unter FB 3
Moin,
ich wollte mit Merge aus einer Tabelle in eine andere schreiben. Das funktioniert auch mit 2.5.* aber unter Firebird 3. erhalte ich eine Meldung
Code:
und danach den Violation of Primary Key vom Hauptschlüssel
Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values
lt Netz soll ein gbak das Problem lösen, aber das macht es nicht. Sobald ein Datensatz doppelt vorhanden ist, knallt es. und genau dafür soll das MERGE mit with not matching ja da sein. Jemand schon einmal in das Problem gelaufen und weiß wie man das löst? |
AW: Problem mit Merge unter FB 3
Wie sieht denn dein Merge-Statement aus?
|
AW: Problem mit Merge unter FB 3
Code:
das ist etwas vereinfacht, weil es sind mehr Felder.
merge into KUNDENSTAMM a
using ( select KDNR,NAME,VORNAME,STRASSE,ORT,PLZ,TELEFON,EMAIL from AUFTRAG where coalesce(b.KDNR,'') <> '' group by KDNR,NAME,VORNAME,STRASSE,ORT,PLZ,TELEFON,EMAIL ) b on (coalesce(rtrim(a.KDNR),'') = coalesce(rtrim(b.KDNR),'')) when not matched then insert (a.KDNR,a.NAME,a.VORNAME,a.STRASSE,a.ORT,a.PLZ,a.TELEFON,a.EMAIL) values (b.KDNR,b.NAME,b.VORNAME,b.STRASSE,b.ORT,b.PLZ,b.TELEFON,b.EMAIL); KDNR ist das Haupffeld in KUNDENSTAMM und kann in AUFTRAG mehrfach vorhanden sein. Gleiche Tabelle mit gleichem Inhalt in FB 2.5.* funktioniert und in 3.* nicht. |
AW: Problem mit Merge unter FB 3
Hast du mal probiert bei der Datenmenge die du in USING verwendest (Quelltabelle) nach dem Primarykey zu sortieren aus deiner Zieltabelle?
Also in dem Fall nach KUNDENNR? |
AW: Problem mit Merge unter FB 3
Zitat:
Frank |
AW: Problem mit Merge unter FB 3
Welche Firbird 3 Version benutzt du?
Da gab es wohl auch Probleme mit MERGE, wurde in der Version 3.0.6 behoben. Siehe: ![]() ![]() |
AW: Problem mit Merge unter FB 3
Zitat:
bei dem Kunden haben wir die 3.0.9. Der Fehler liest sich anders. Dort crashed der gesamte SQL Server. Zitat:
Wenn ich das Ding kürze auf das notwendigste geht es immer noch nicht. Beide Felder varchar 15. IMO funktioniert not matched nicht.
Code:
merge into KUNDENSTAMM as a
using AUFTRAG as b on a.KDNR = b.KDNR when not matched then insert (KDNR) values (b.KDNR); |
AW: Problem mit Merge unter FB 3
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
KUNR in Kundenstamm ist Primary Key? Ich habe in einer Test DB das mal nachgestellt. (FB 3.0.10) Alle Varianten funktioniert es ohne Murren. So funktioniert es, Wenn ich AUFTRAG nicht gruppiere (also in der Quelle doppelte KUNR' s habe) als auch wenn ich in der Zieltabelle mehrere Datensätze mit gleicher KUNR habe. Die beim Kunden installierte und verwendete fbclient.dll passt exakt zur Server - Version? |
AW: Problem mit Merge unter FB 3
Zitat:
KDNR ist in Kundenstamm Primary Korrekt. Kann aber in AUFTRAG mehrfach vorkommen. Dafür ist not matching ja gedacht. Und wie gesagt funktioniert auch in anderen, viel größeren, Datenbanken mit 2.5.1 ohne Problem. Und jede Datenbank welche mit 2.5.1 funktioniert wir mit gbak nach 3.0.9 rüber ziehen und es dort den MERGE starten gibt es das Problem. Ich berichte morgen um es was gebracht hat. Weil sonst habe ich ein Problem :-) update or insert aus select will Firebird ja nicht implementieren und verweist auf MERGE. |
AW: Problem mit Merge unter FB 3
auch mit der 3.0.10 funktioniert es nicht.
Ich habe mir nun die Tabelle AUFTRAG aus 3.0.10 per copy as insert mit Flamerobin rausgezogen. In eine Datenbank welche noch mit 2.5.* läuft eingespielt. Dort läuft der Merge. Habe mir dann aus KUNDEN das wieder per copy as insert rausgezogen und in die 3.0.10 eingespielt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz