SQL 更新以进行切换

SQL update to make a toggle

我想按照那里的定义提出切换请求 T-SQL: Using a CASE in an UPDATE statement to update certain columns depending on a condition

我这样做了:

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;

但总是语法错误。那我错过了什么?

显然您只想更新 capteur.valeur 非零值并将其设置为零。试试这个更简单的语句:

MySql风格

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;

Sql 服务器样式

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;

我也猜想你的更新语句语法错误

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
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;