Anmelden

View Full Version : SQl Insert mit allen Feldern



Seiten : [1] 2

mk
15-01-26, 16:56
Hi zusammen,

ich möchte mit folgendem SQL Daten duplizieren

insert into tabelleA
select * from TabelleA where Key = 'Anton'

Wobei der Key mit Berta eingefügt werden soll.
(Also das klassiche kopieren auf eine neue Auftragsnummer )

Kann man das ohne die Spaltenliste realisieren ?
Gruß
Michael

Fuerchau
15-01-26, 17:54
Definitiv leider nein.

Du benötigst da ein wenig mehr mit einer global temporary table:

Declare global temporary ....
Insert into myglobal select * from mytable where ...
update myglobal set name = 'new';
insert into mytable select * from myglobal;
delete from myglobal; -- aufräumen fürs nächste Mal.

mk
16-01-26, 07:59
Hi,

schade, hatte gehofft das es mittlerweile etwas schöneres gibt :-)

B.Hauser
16-01-26, 08:25
Ansonsten gibt es nur:
Spalten auflisten und den Wert in der gewünschten Spalte überschreiben.
Wenn Du das mit ACS machst (und beim Prompt alle Spalten auswählst), sollte das kein Problem sein.

... oder 3-Zeiler in RPG: Datensatz in (externe) Datenstruktur einlesen (SELECT ... INTO), Wert(e) ändern und dann Datenstruktur beim Insert angeben (INSERT ... VALUES(:ExtDS)).

Fuerchau
16-01-26, 15:14
Das ist ja bekannt.
Allerdings, wenn man ab und an mal Tabellen erweitert, möchte man schon irgendwelche Automatismen wie mit native File-IO.
Da gibts dann Abhängigkeits-Compiler, die bei Änderung einer Tabelle alle betroffenen Componenten mit umwandeln. Führe ich die Spalten einzeln auf, muss ich neue Spalten wieder mit einfügen.
Bei größeren Teams weiß man allerdings nie, ob jemand mit "*" oder mit Feldliste gearbeitet hat.
Und wenn dann wie bei obigen Fällen eine Spalte fehlt, weil das so niemand auf dem Schirm hatte, ist später der Teufel los.

Da Speicher und die Anzahl Spalten heute kaum noch einen Unterschied in der Performance machen, arbeitet man gerne mit "Select * into : MyDs" oder "Update mytable set row = : MyDs".

Nur bei speziellen Views, die ganz bestimmte Aufgaben haben, arbeite ich dann mit Namenslisten.

Natürlich ist es einfacher, den Select per Into in eine DS und per Update mit DS durchzuführen um dem Problem aus dem Weg zu gehen. Aber mit pur SQL gehts so halt auch;-).

E305GL
18-01-26, 08:41
Hi zusammen,

ich möchte mit folgendem SQL Daten duplizieren

insert into tabelleA
select * from TabelleA where Key = 'Anton'

Wobei der Key mit Berta eingefügt werden soll.
(Also das klassiche kopieren auf eine neue Auftragsnummer )

Kann man das ohne die Spaltenliste realisieren ?
Gruß
Michael
warum willst du das unbedingt mit sql tun ????
CPYF könnte da die lösung sein

Fuerchau
18-01-26, 15:16
Wenn du noch verraten möchtest, wie du gleichzeitig eine Spalte ändern willst?
Ich kenne nur die Möglichkeit per z.B. *UPDADD und einem Schlüssel Zeilen aus einer anderen/derselben Datei per Update oder Add zu kopieren.

Ggf. kann noch ein:

update myfile
set field = 'HUGO'
where key = (
select key from final table
(insert into myfile select * from myfile where ....)
)

wenn man eine unique Identity hat. Da ist dann noch ein override user values erforderlich.

Ob allerdings der "select x from final table" innerhalb eines derived tables stehen kann, habe ich noch nicht auspropiert. Ich glaube aber, dass das nicht geht.

Ein weiteres Manko: Der Insert darf keinen anderen Unique-Key verletzen, was außer mit Identities eher selten vorkommt.

BenderD
19-01-26, 09:31
... eine ordentliche QS übersteht das alles nicht! Einem bestehenden oder entstehendem Auftrag einfach was dranzuhäkeln... Und sage keiner, dass das nicht passiert...

D*B

Fuerchau
19-01-26, 09:57
Was ist denn schon eine ordentliche QS:D.

holgerscherer
20-01-26, 11:04
Was ist denn schon eine ordentliche QS:D.

das, womit man als Berater Geld verdienen kann, was den Dokumentationsaufwand in ungeahnte Höhen treiben kann, und (evtl) auch das Produkt verbessern kann.

Auf jeden Fall ist ein bissl QS schon ganz toll. So kann man Stolperfallen vermeiden, in die man sonst selbst rein fällt.