CTom Geschrieben 8. Februar 2010 Teilen Geschrieben 8. Februar 2010 Hi Leute, Ich habs schon mehrmals probiert und bekomme es nicht hin. Ich führe "Insert Into [table1] Select * from [table1] Where [bedingung]" aus und möchte gerne den dabei neu erstellen Datensatz die PKs ändern! Ich muss das so machen, da ein altes System, mit dem noch gearbeitet wird, eine identische Spalte anlegt wenn ein Datensatz ein gelöscht flag bekommt! Ich möchte also von diesen 2 exakt gleichen Datenrows nur 1 ändern. Ich bitte euch nicht zu fragen warum ich es brauchen bzw. ich weis es ist Redundant! MfG CTom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
grueni Geschrieben 8. Februar 2010 Teilen Geschrieben 8. Februar 2010 ->nach Datenbanken verschoben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 8. Februar 2010 Teilen Geschrieben 8. Februar 2010 Erst einmal wäre es sinnvoll, wenn Du Dein DBMS nennen würdest! Hi Leute, Ich führe "Insert Into [table1] Select * from [table1] Where [bedingung]" aus und möchte gerne den dabei neu erstellen Datensatz die PKs ändern! Je nach DBMS ist das in einem Schritt nicht möglich. Tabelle locken, IDs ändern und kopieren, wobei ich eher zu dem View tendiere (siehe nachfolgend) Ich bitte euch nicht zu fragen warum ich es brauchen bzw. ich weis es ist Redundant! Ich würde Dir übergangsweise, damit sich alte und neu Daten nicht mischen zu einem View raten! D.h. alte Tabelle haben und die IDs ändern bzw. Falg für "alt" hinzufügen, neue Tabelle erstellen und beide via Union zusammen zu einer führen. Falls das Frontend noch auf die alte Tabelle schreibt, setzt man einfach einen Trigger, der bei einem Insert das ganze in die neue Tabelle umleitet, der Update / Delete muss halt schauen, ob es eine "alte" oder "neue" ID ist. Das ganze würde auch über Stored Procedures sich realisieren lassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CTom Geschrieben 8. Februar 2010 Autor Teilen Geschrieben 8. Februar 2010 (bearbeitet) @flashpixx Danke. Zum DBMS es eine Dateibasierte DB mit DBF-Files. Die DBF's sind, Gott sei dank, nun im "Advantage Database Server" eingehängt und man kann SQL ausführen darauf. Vorher ging nur ein Zugriff über die Zeilen- und Spaltennummer. Ich habe mittlerweile eine Lösung für mein Problem. Die Lösung: INSERT INTO [Tablename1] ([Fieldname1], [Fieldname2], [Fieldname3], ...) SELECT [Fieldname1], [Fieldname2], "String", ... FROM [Tablename1] WHERE [Bedingung1]; für [Fieldname3], oder andere, kann ich etwas beliebiges in der benötigten Reihenfolge im "Select" schreiben z.B. "String". Damit kann ich den Datensatz kopieren und die Kopie vorm einfügen manipulieren. Leider hab ich ein neues! Ich führe ein Update SET auf eine Tabelle mit über 10 Mio. Datensätze aus, wobei nur bei lediglich ca. 40.000 Row's ein Update vorgenommen wird. Ich ändere nur Maximal 2 Spaltenwerte was aber ziemlich lange dauert, wobei eine einfache "Select" ca. 1-2 Sekunden dauert. MfG CTom Bearbeitet 8. Februar 2010 von CTom Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_unixtom Geschrieben 18. Februar 2010 Teilen Geschrieben 18. Februar 2010 Dafür ist ein RDBMS nicht geeignet. Dort muss ein Datensatz immer eindeutig sein. Deshalb ja auch RDBMS. Da musst Du bereits beim INSERT ansetzen und eine andere Lösung finden. z.B. den PK bereits im INSERT einbauen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 18. Februar 2010 Teilen Geschrieben 18. Februar 2010 Leider hab ich ein neues! Ich führe ein Update SET auf eine Tabelle mit über 10 Mio. Datensätze aus, wobei nur bei lediglich ca. 40.000 Row's ein Update vorgenommen wird. Ich ändere nur Maximal 2 Spaltenwerte was aber ziemlich lange dauert, wobei eine einfache "Select" ca. 1-2 Sekunden dauert. Ein Update ist immer "teurer" als ein Select (write lock erzeugen, Daten ändern, write lock entfernen), vor allem wenn Du 40.000 Records anfassen musst. Evtl macht es Sinn, wenn Du das ganze von der Transaktion anders verarbeitest (wenn es auch semantisch sinnvoll ist). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.