also ich wuerde mich mit so einem Code nicht ohne vorangehende ausfuehrliche Tests an die Oeffentlichkeit wenden. ;-)
sinn und zweck dieses forums ist nicht, anderen die arbeit abzunehmen und fertige lösungen zu liefern, sondern gedankenanstöße zu geben.
oftmals hat man ja einen 'klemmer', und ein tip hilft einem weiter mit einem anderen gedankengang.
nochmal das problem:
aus 2 verschieden sätzen einer tabelle sollen inhalte getauscht werden. dies soll mit einem aufruf des sql servers erledigt werden.
dies geht mit einem update ohne join, wenn beide werte existent sind, es also 2 zeilen gibt.
das weiterführende problem ist, das es keine 2. zeile gibt.
dies soll mit einem join behandelt werden.
ein join erweitert das resultset um weitere spalten einer anderen tabelle. daher ist dieser gedankenansatz völlig ok.
mit einem join auf dieselbe tabelle ist die spalte also 2 mal in der ergebniszeile.
durch abfrage von isnull in der bedingung wird nun nur dann ein ergebnis geliefert, wenn beide zeilen vorhanden sind.
wenn nun nur eine zeile als resultset per bedingung ausgewählt wird, hat man beide spalten (links und rechts) aus verschiedenen zeilen im zugriff. mit der entspechenden set zuweisung können dann die spalten gesetzt werden.
die andere möglichkeit ist, per bedingung 2 zeilen im ergebnis auszuwählen, wobei die erste zeile die spalten in der folge links und rechts hat, und die zweite zeile die spalten umgekehrt, also rechts und links liefert. hier kann dann ebenfalls mit set ein anderer wert zugewwiesen werden.