2017-04-20 1 views
0

Je veux faire une demande de bascule tel que défini il T-SQL: Using a CASE in an UPDATE statement to update certain columns depending on a conditionmise à jour de SQL pour faire une bascule

Je l'ai fait:

Update capteur 
join smartparking_reference on(smartparking_reference.id_capteur = capteur.id_capteur) 
set (CASE WHEN capteur.valeur != 0 then capteur.valeur = 0 and last_value_date = now() END) 
where smartparking_reference.id_ref = 3; 

Mais toujours une erreur de syntaxe. Donc ... Qu'est ce que j'ai manqué ?

+0

Cet ensemble (CASE WHEN capteur.valeur! = 0 puis capteur.valeur = 0 et last_value_date = now() END) 'semble très suspect! Essayez-vous de mettre à jour deux champs? –

+0

Vous dites que vous obtenez une erreur de syntaxe. Pouvons-nous connaître le message d'erreur? –

+0

https://community.modeanalytics.com/sql/tutorial/sql-case/ – bassxzero

Répondre

0
UPDATE capteur 
SET capteur.valeur=(
    CASE 
    WHEN capteur.valeur != 0 THEN 
     0 ELSE 'another value' 
    END 
),last_value_date = now() 
FROM capteur 
INNER JOIN smartparking_reference ON 
    smartparking_reference.id_capteur = capteur.id_capteur 
WHERE 
    smartparking_reference.id_ref = 3; 
1

Apparemment, vous voulez mettre à jour capteur.valeur uniquement s'il est différent de zéro et le régler à zéro. Essayez cette déclaration plus simple:

MySql de style

Update capteur 
join smartparking_reference on(smartparking_reference.id_capteur = capteur.id_capteur) 
set valeur = case when valeur = 0 then 1 else 0 end, last_value_date = now() 
where smartparking_reference.id_ref = 3; 

de style Sql Server

Update capteur 
set valeur = case when valeur = 0 then 1 else 0 end, last_value_date = getdate() 
from smartparking_reference 
where smartparking_reference.id_capteur = capteur.id_capteur 
and smartparking_reference.id_ref = 3; 
+0

Eh bien ce n'est pas exactement le bon moyen. Je n'ai aucune information sur le nouvel état de l'item, et cette requête doit fonctionner comme un switch, donc si la valeur est 0, je veux stocker 1 et l'inverse (de 1 à 0). Donc j'ai essayé ceci pour effectuer seulement 1 requête –

+0

Eh bien désolé encore mais je confirme mon dernier commentaire, ceci ne résoudra pas mon problème, vérifie svp dehors –

+0

Je ne suis pas sûr de comprendre ton problème exactement, je t'ai montré quoi faire pour que votre requête fonctionne sans erreur de syntaxe. Maintenant, si vous voulez réellement basculer vérifier ma réponse mise à jour, qui implémente cela. Notez cependant que votre requête d'origine n'impliquait même pas cela. –

0

Je suppose aussi votre déclaration de mise à jour a la mauvaise syntaxe

UPDATE c 
SET valeur = 0, last_value_date = now() 
FROM capteur c 
    INNER JOIN smartparking_reference AS sr ON 
    sr.id_capteur = c.id_capteur 
WHERE sr.id_ref = 3 and c.valeur != 0 
+0

Ceci est une syntaxe SQL-Server, OP a écrit quelque chose qui ressemble à MySql ... –