Es funktioniert endlich! Aber auf die Lösung via Merge wäre ich nie gekommen, ehrlichgesagt versteh ich ned ganz wieso des überhaupt funktioniert:
merge into WM71W02T.PAWS dest
using(select col1,col2,col3,... -- Select * geht auch
from WM71W01T.PAWS where paws_artikel_nr in(select ArtikelNr from temp100 where progress='N')) src
ON (src.PAWS_ARTIKEL_NR = dest.PAWS_ARTIKEL_NR)
when matched then
UPDATE SET
ARTIKELART=(SELECT ARTIKELART FROM WM71W01T.PAWS WHERE WM71W01T.PAWS.paws_artikel_nr = ArtikelNr ),
BESCHAFFUNGSKENNER=(SELECT BESCHAFFUNGSKENNER FROM WM71W01T.PAWS WHERE WM71W01T.PAWS.paws_artikel_nr = ArtikelNr)
WHERE EXISTS (SELECT * FROM WM71W02T.PAWS WHERE WM71W02T.PAWS.paws_artikel_nr = ArtikelNr )
when not matched then
INSERT (col1,col2,col3,...)
values (src.col1,src.col2,src.col3,...);
ON (src.PAWS_ARTIKEL_NR = dest.PAWS_ARTIKEL_NR)
Als ich deine Musterlösung angepasst hab kam die Fehlermeldung, dass ON Fehlt. Ich hab jetzt einfach mal die PKs verglichen. Da es funktioniert scheint es richtig zu sein?
Hätte da noch etwas Klärungebedarf:
using(select col1,col2,col3,...
from WM71W01T.PAWS where paws_artikel_nr
in(select ArtikelNr from temp100 where progress='N'))
In TEMP100 stecken mehrere Datenzätzen, die diese Bedinung erfüllen. Werden a nicht alle diese Datensätze zurückgegeben? Bedeutet dies, das des merge mit einem aufruf alle Datensätze auf einmal ändert? oder immer nur einen?
wenn es alle auf einmal ändert, würde es sinn manen, "WM71W02T.PAWS.paws_artikel_nr = ArtikelNr" durch
"WM71W02T.PAWS.paws_artikel_nr = (select ArtikelNr from temp100 where progress='N')" zu ersetzen?
edit:
Wieso kamm man beim Merge Insert geigentlich nicht folgendes machen?
INSERT (SELECT * FROM WM71W01T.PAWS WHERE WM71W01T.PAWS.paws_artikel_nr = ArtikelNr );