Zum Inhalt springen

SQL Update von einer Row die 2mal vorhanden ist


CTom

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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 von CTom
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...