2010-12-17 3 views
1

je SQL suivante (à l'aide de MS SQL)Utilisation de CASE dans Update requête

UPDATE AR_Slots 
SET Running = @Running, 
StopSignal = @StopSignal, 
WHERE (SlotId = @SlotId) 

Je veux définir un champ appelé RunListID à 0 si le paramètre de fonctionnement (booléen) est vrai, sinon je ne veux pas changer la valeur du tout.

Quelle est la "bonne" façon de procéder?

Merci, Stefan

Répondre

3

Essayez quelque chose comme

UPDATE AR_Slots 
SET RunListID = 
    CASE 
     WHEN <your check value> 
      THEN 0 
     ELSE RunListID 
    END, 
    <your other sets> 
WHERE <your criteria> 
+1

Je suis d'accord que cela fonctionnerait la solution ci-dessus. J'ajouterais que même le retour de RunListID à sa valeur d'origine est vu comme une modification de la base de données. Si un index ou un déclencheur est associé à ce champ, alors il reconstruira l'index ou exécutera le déclencheur. Par conséquent, avoir un SQL distinct pour cette mise à jour peut être une option si la performance est la clé. –

+0

Merci pour ça! Je ne savais pas ce que je pourrais utiliser le RunListID réel et juste le régler à nouveau. – StefanE