Je me demande si cela est possible du tout. Je souhaite mettre à jour la colonne x si une condition est vraie, sinon la colonne y serait mise à jour
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
J'ai cherché partout, essayé certaines choses et je suis incapable de trouver une solution. Je pense que ce n'est pas possible, mais je pensais que je demanderais ici et voir si quelqu'un l'a déjà fait. Merci d'avance.
Vous ne pouvez pas utiliser une condition pour modifier la structure de votre requête, mais uniquement les données impliquées. Vous pourriez faire ceci:
update table set
columnx = (case when condition then 25 else columnx end),
columny = (case when condition then columny else 25 end)
Ceci est sémantiquement identique, mais n'oubliez pas que les deux colonnes seront toujours mises à jour. Ceci probablement ne vous causera aucun problème, mais si vous avez un volume transactionnel élevé, cela pourrait entraîner des problèmes de simultanéité.
La seule façon de faire spécifiquement ce que vous demandez est d'utiliser du SQL dynamique. C’est cependant quelque chose que je vous encourage à éviter. La solution ci-dessus sera presque certainement suffisante pour ce que vous recherchez.
UPDATE table
SET columnx = CASE WHEN condition THEN 25 ELSE columnx END,
columny = CASE WHEN condition THEN columny ELSE 25 END
Je sais que c'est une très vieille question, mais cela a fonctionné pour moi:
UPDATE TABLE SET FIELD1 =
CASE
WHEN FIELD1 = Condition1 THEN 'Result1'
WHEN FIELD1 = Condition2 THEN 'Result2'
WHEN FIELD1 = Condition3 THEN 'Result3'
END;
Cordialement
Je sais que c'est une très vieille question et le problème est marqué comme résolu. Cependant, si quelqu'un avec un cas comme le mien où la table a un déclencheur pour la journalisation des données sur les événements de mise à jour, cela posera problème. Les deux colonnes recevront la mise à jour et le journal fera des entrées inutiles. Comme je l'ai fait
IF (CONDITION) IS TRUE
BEGIN
UPDATE table SET columnx = 25
END
ELSE
BEGIN
UPDATE table SET columny = 25
END
Maintenant, cela présente un autre avantage: il n’a pas d’écritures inutiles comme les solutions ci-dessus.