Ошибка синтаксиса выражения CASE SQL

#sql #sql-server #sql-server-2005 #syntax

#sql #sql-сервер #sql-server-2005 #синтаксис

Вопрос:

Я исследовал везде, но все еще не могу исправить простую ошибку: запуск Microsoft SQL server:

 UPDATE copyprogmaster
       SET active =
                 CASE
                   WHEN active = 1 THEN active = 0
                   WHEN active = 0 THEN active = 1
                  ELSE active
                 END
WHERE source = 'Mass_Mail'
  

моя ошибка :

Строка 4: Неправильный синтаксис рядом с ‘=’.

Ответ №1:

Удалите = после THEN , чтобы:

   UPDATE copyprogmaster
       SET active =
                 CASE
                   WHEN active = 1 THEN 0
                   WHEN active = 0 THEN 1
                  ELSE active
                 END
  WHERE source = 'Mass_Mail'
  

У вас уже есть active = после SET во второй строке.

Ответ №2:

Вам не нужно повторять «active =» после THEN

 UPDATE copyprogmaster
       SET active =
                 CASE
                   WHEN active = 1 THEN 0
                   WHEN active = 0 THEN 1
                  ELSE active
                 END
WHERE source = 'Mass_Mail'
  

Вот пример из документации на http://msdn.microsoft.com/en-us/library/ms181765.aspx

 USE AdventureWorks2008R2;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO
  

Ответ №3:

Основываясь на вашем запросе, я предполагаю, что active полем является bit or int (предполагая, что int поле имеет только значения 0, 1 или NULL). В этом случае, я полагаю, вы можете написать запрос следующим образом:

 UPDATE  dbo.copyprogmaster
SET     active = active ^ 1
WHERE   source = 'Mass_Mail'
  

Обратите внимание, что запрос может обрабатывать NULL значения, а также строки #1, #4 и # 6 на скриншоте не изменились. На скриншоте # 1 показана структура таблицы, а на скриншоте # 2 показан пример выполнения вышеупомянутого запроса.

Надеюсь, это поможет.

Скриншот # 1:

Таблица

Скриншот # 2:

Вывод