Ich frage mich, ob das überhaupt möglich ist. Ich möchte Spalte x aktualisieren, wenn eine Bedingung erfüllt ist, andernfalls würde Spalte y aktualisiert
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
Ich habe überall gesucht, einige Dinge ausprobiert und kann keine Lösung finden. Ich denke, es ist nicht möglich, aber ich dachte, ich würde hier fragen und sehen, ob es schon jemand getan hat. Danke im Voraus.
Sie können keine Bedingung verwenden, um die Struktur Ihrer Abfrage zu ändern, sondern nur die betroffenen Daten. Sie könnten dies tun:
update table set
columnx = (case when condition then 25 else columnx end),
columny = (case when condition then columny else 25 end)
Dies ist semantisch gleich, aber denken Sie daran, dass beide Spalten werden immer aktualisiert. Dies wahrscheinlich verursacht keine Probleme. Wenn Sie jedoch ein hohes Transaktionsvolumen haben, kann dies zu Problemen mit der Parallelität führen.
Die einzige Möglichkeit, speziell zu tun, besteht darin, dynamisches SQL zu verwenden. Dies ist jedoch etwas, von dem ich Sie ermutigen möchte, sich fernzuhalten. Die obige Lösung wird mit ziemlicher Sicherheit ausreichen, um das zu erreichen, wonach Sie suchen.
UPDATE table
SET columnx = CASE WHEN condition THEN 25 ELSE columnx END,
columny = CASE WHEN condition THEN columny ELSE 25 END
Ich weiß, das ist eine sehr alte Frage, aber das hat bei mir funktioniert:
UPDATE TABLE SET FIELD1 =
CASE
WHEN FIELD1 = Condition1 THEN 'Result1'
WHEN FIELD1 = Condition2 THEN 'Result2'
WHEN FIELD1 = Condition3 THEN 'Result3'
END;
Grüße
Ich weiß, dass dies eine sehr alte Frage ist und das Problem als behoben markiert ist. Wenn jedoch jemand mit einem Fall wie dem meinen, bei dem die Tabelle bei Aktualisierungsereignissen einen Auslöser für die Datenprotokollierung hat, führt dies zu Problemen. Beide Spalten erhalten das Update und das Protokoll macht unbrauchbare Einträge. So wie ich es tat
IF (CONDITION) IS TRUE
BEGIN
UPDATE table SET columnx = 25
END
ELSE
BEGIN
UPDATE table SET columny = 25
END
Dies hat den weiteren Vorteil, dass keine unnötigen Schreibvorgänge wie bei den obigen Lösungen vorhanden sind.