utilisant CASE pour sélectionner la colonne pour SET dans l'instruction UPDATE IN SQL SERVER

Je veux exécuter la déclaration suivante. Est-il possible de sélectionner quelle colonne mettre à jour en utilisant le CASE?

UPDATE TABVAR CASE WHEN M BETWEEN 0 AND 6 THEN SET M0_TO_6 = M WHEN M BETWEEN 7 AND 18 THEN SET M7_TO_18 = M WHEN M BETWEEN 19 AND 54 THEN SET M19_TO_54 = M WHEN M > 54 THEN SET MABOVE54 = M END 

Vous ne pouvez pas utiliser une expression de case comme celle-ci, seulement pour renvoyer une valeur (l-). Vous pouvez, cependant, émuler un tel comportement avec une expression de case pour chaque colonne:

 UPDATE tabvar SET m0_to_6 = CASE WHEN m BETWEEN 0 AND 6 THEN m ELSE m0_to_6 END, m7_to_18 = CASE WHEN m BETWEEN 7 AND 18 THEN m ELSE m7_to_18 END, m19_to_54 = CASE WHEN m BETWEEN 19 AND 54 THEN m ELSE m19_to_54 END, mabove54 = CASE WHEN m > 54 THEN m ELSE mabove54 END 

Pas de cette façon, mais vous pourriez faire essentiellement la même chose comme ceci:

 UPDATE TABVAR set M0_TO_6 = CASE WHEN M BETWEEN 0 AND 6 THEN M else M0_TO_6 end, M7_TO_18 = CASE WHEN M BETWEEN 7 AND 18 THEN M else M7_TO_18 END, ... 

De cette façon, vous mettez à jour soit la valeur M dans la colonne, soit la valeur qui existe déjà dans cette colonne.

Je pense que vous avez besoin de ce type de requête:

 UPDATE TABVAR SET M0_TO_6 = CASE WHEN M BETWEEN 0 AND 6 THEN M ELSE M0_TO_6 END, M7_TO_18 = CASE WHEN M BETWEEN 7 AND 18 THEN M ELSE M7_TO_18 END, M19_TO_54 = CASE WHEN M BETWEEN 19 AND 54 THEN M ELSE M19_TO_54 END, MABOVE54 = CASE WHEN M > 54 THEN M ELSE MABOVE54 END