Синтаксическая ошибка выражения CASE SQL - PullRequest
4 голосов
/ 27 мая 2011

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

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: неверносинтаксис около '='.

Ответы [ 3 ]

10 голосов
/ 27 мая 2011

Удалить = после 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 во второй строке.

4 голосов
/ 27 мая 2011

Вам не нужно повторять «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
1 голос
/ 29 мая 2011

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

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

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

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

Снимок экрана# 1:

Table

Снимок экрана № 2:

Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...