2016-10-27 2 views
0

Ich möchte eine Zeile duplizieren und fügen Sie es in der gleichen Tabelle mit einigen neuen Werten. Problem ist, dass mein Tisch hat rund 50 Spalten, so dass meine Frage irgendwie dumm aussieht:duplizieren und eine Zeile mit einigen Änderungen einfügen

insert into DUMBTABLE (
, Col1 
, Col2 
, Col3 
-- 47 rows to go... 
. 
. 
, Col50) select 'new_val1' 
       ,'new_val2' 
       , Col3 
       -- 47 rows to go again... 
       . 
       . 
       . 
       , Col50 from DUMBTABLE where Col1 = 'old_val' 

Gibt es eine bessere Art und Weise dynamisch alle Spalten, zu erhalten und in der Lage sein, zu spezifizieren whice werden diejenigen mit neuen Werten aktualisiert werden? Danke

Ps: Ich werde diese Abfrage über php ausführen. Eine gespeicherte Prozedur ist im Moment keine Option.

+0

Das ist der Weg zu gehen. (Wie könnte jemand anders wissen, welche Spalten ersetzt/behalten werden?) Die Hauptfrage ist jedoch, warum Ihre Tabelle 50 Spalten hat? Schlecht gestaltete db? – jarlh

+0

@jarlh ja die DB ist schlecht entworfen und es gibt nichts, was ich dagegen tun kann :( – RidRoid

+0

Wenn Sie eine gespeicherte verwenden könnten Sie eine Prozedur, die eine dynamische SQL erstellt, um die Aufgabe zu tun, mit einigen Eingabeparametern sagen, welche Spalten Kopieren/Ändern Mit einem einfachen SQL glaube ich, dass Sie nicht können – Aleksej

Antwort

0

Es scheint mir, dass Sie 50 Variable new_val1, new_val2, ..., new_val50 haben. Wenn diese Variablen einen Wert haben, möchten Sie, dass die neue Zeile diesen Wert in der entsprechenden Spalte hat, andernfalls möchten Sie den doppelten Zeilenspaltenwert beibehalten. Basierend auf diesen Annahmen finden Sie unter dem folgenden Code:

sql = "insert into DUMBTABLE (
, Col1 
, Col2 
, Col3 
-- 47 rows to go... 
. 
. 
, Col50) select " + new_val1 == null ? "col1," : "'" + new_val1 + "'," 
       + new_val2 == null ? "col2," : "'" + new_val2 + "'," 
       + new_val3 == null ? "col3," : "'" + new_val3 + "'," 
       -- 47 rows to go again... 
       . 
       . 
       . 
       + new_val50 == null ? "col50," : "'" + new_val50 + "'," 
    " from DUMBTABLE where Col1 = 'old_val'"; 
Verwandte Themen