Laden...

Firebird Batch Insert Duplicate Violation

Erstellt von nicky vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.393 Views
N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 10 Jahren
Firebird Batch Insert Duplicate Violation

verwendetes Datenbanksystem: Firebird2.1

Hey,

ich möchte Datensätze via BatchExecution einfügen. Leider bekomme ich einen Unique Key Violation Error wenn ich Einträge hinzufüge die bereits vorhanden sind. (Das Feld hat einen UNIQUE Index, das ist gewollt.)

Die neuen Datensätze werden nicht hinzugefügt weil die BatchExecution bei der UNIQUE KEY Exception abbricht. Weiss jemand ob ich bestimmte Fehlercodes ignorieren kann? In der Dokumentation habe ich leider nichts passendes gefunden.

             
                FirebirdSql.Data.Isql.FbBatchExecution fbBatchExecution = new FirebirdSql.Data.Isql.FbBatchExecution(dbConnection);
                foreach (string myItem in myItemList)
                {
                    fbBatchExecution.SqlStatements.Add("insert into ...");
                }
                fbBatchExecution.Execute(true);

Cheers

E
180 Beiträge seit 2010
vor 10 Jahren

aber ist es nicht der sinn eines unique-keys bzw. Indexes genau dies zu verhindern? dann ist doch der unique-key falsch gesetzt? ansonsten kannst du nur prüfen vorher ob der unique key anschlagen würde oder nicht z.b. mit einer SELECT anweisung die die Anzahl der betroffnenen Zeilen zurückgibt.

F
10.010 Beiträge seit 2004
vor 10 Jahren

Oder man liest mal bei Firebird nach und findet da dann
http://www.firebirdsql.org/refdocs/langrefupd25-update-or-insert.html

N
nicky Themenstarter:in
232 Beiträge seit 2011
vor 10 Jahren

Ich möchte die vorhandenen Daten nicht überschreiben. INSERT OR SKIP müsste es sein.. 😃 Hmm...

W
955 Beiträge seit 2010
vor 10 Jahren

Na dann schau doch mal richtig in FZelles doku-link nach, da gibt's ein MERGE-Stmt. Vllt ist der dafür geeignet. Man könnte vllt erst alle in eine temporäre Tabelle schreiben, und dann die Sätze welche keine Duplikate sind, in der Zieltabelle anfügen.