#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: