Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234

SQL-запрос UPDATE/SET/CASE

26.07.2015, 16:50. Показов 2859. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь сделать запрос на изменение записей в БД из внешнего приложения при определенных условиях, используя конструкцию
SQL
1
"UPDATE ... SET Поле = CASE WHEN ... THEN ... ELSE ... END"
Пробовал:
SQL
1
2
3
4
5
6
7
8
9
10
//так:
"UPDATE [Таблица] SET Поле = CASE WHEN 'а2' THEN 'а3' WHEN 'а1' THEN 'а2' WHEN 'б2' THEN 'б3' WHEN 'б1' THEN 'б2' ELSE CAST (Поле AS CHAR (255)) END"
//так:
"UPDATE [Таблица] SET Поле = CASE WHEN 'а2' THEN 'а3' WHEN 'а1' THEN 'а2' WHEN 'б2' THEN 'б3' WHEN 'б1' THEN 'б2' END"
//так:
"UPDATE [Таблица] SET Поле = CASE WHEN 'а2' THEN 'а3' WHEN 'а1' THEN 'а2' WHEN 'б2' THEN 'б3' WHEN 'б1' THEN 'б2' END Поле"
//так:
"UPDATE [Таблица] SET Поле = CASE WHEN 'а2' THEN 'а3' WHEN 'а1' THEN 'а2' WHEN 'б2' THEN 'б3' WHEN 'б1' THEN 'б2' END WHERE Поле IN ('а1','а2','а3','б1','б2','б3')"
//так:
"UPDATE [Таблица] SET Поле = CASE WHEN Поле ='а2' THEN 'а3' WHEN Поле ='а1' THEN 'а2' WHEN Поле = 'б2' THEN 'б3' WHEN Поле ='б1' THEN 'б2' END"
ну и еще десяток всевозможных сочетаний и вариантов. Выдает одну и ту же ошибку:
"Пропущен оператор в выражении 'CASE WHEN 'а2' THEN 'а3' WHEN 'а1' THEN 'а2' WHEN 'б2' THEN 'б3' WHEN 'б1' THEN 'б2' END'".
Чего туда еще надо? Я уже иссяк
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2015, 16:50
Ответы с готовыми решениями:

UPDATE SQL Запрос
Привет всем ! Есть БД Данные из таблицы успешно "закачались" в DataGridView При нажатии на одну из строчек в DataGridView...

SQL запрос UPDATE и VALUES
Здравствуйте! Мне нужно обновить в базе mdb запись. Помогите построить запрос, подкиньте пример.

MS SQL UPDATE
как значение одной таблицы приравнять к значению второй.В каждой таблице по одному столбцу

10
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.07.2015, 17:09
chumich, у вас нигде не указано, с чем идет проверка.
Либо добавьте проверку в каждый случай:
SQL
1
UPDATE [Таблица] SET Поле = CASE WHEN Поле1 = 'а2' THEN 'а3' WHEN Поле2 = 'а1' ...
Либо, если все проверки делаются с одним и тем же полем, то вставьте поле после CASE:
SQL
1
UPDATE [Таблица] SET Поле = CASE Поле1 WHEN 'а2' THEN 'а3' WHEN 'а1'
2
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
26.07.2015, 17:29  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
у вас нигде не указано, с чем идет проверка.
kolorotur, в 10 строке предыдущего поста:
SQL
1
UPDATE [Таблица] SET Поле = CASE WHEN Поле ='а2' THEN 'а3' WHEN Поле ='а1' THEN 'а2' WHEN Поле = 'б2' THEN 'б3' WHEN Поле ='б1' THEN 'б2' END
Всё происходит в поле Поле. Если в нем значение а2, его надо заменить на а3, ну и так далее. Попробовал ваш вариант:
SQL
1
UPDATE [Таблица] SET Поле = CASE Поле WHEN 'а2' THEN 'а3' WHEN 'а1'
та же ошибка. Только не понял, почему у вас после CASE стоит Поле1. Проверка должна быть в том же поле, где и замена. Успел еще десяток вариантов попробовать - всё не то
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.07.2015, 17:39
Цитата Сообщение от chumich Посмотреть сообщение
в 10 строке предыдущего поста
Точно, не заметил.

Цитата Сообщение от chumich Посмотреть сообщение
Попробовал ваш вариант
Вы же запрос на SQL Server отправляете? Какой версии?
Попробуйте выполнять его не из стороннего приложения, а через Management Studio или, на худой конец, через командную строку.

Цитата Сообщение от chumich Посмотреть сообщение
не понял, почему у вас после CASE стоит Поле1.
Чтобы показать, что в проверке не обязательно должно использоваться поле, которому присваивается значение.
1
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
26.07.2015, 17:43  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Вы же запрос на SQL Server отправляете?
Нет, работаю с Access 2003 через OleDb. Просто не стал уж весь код приводить. Может быть обязательно нужно ELSE и WHERE, но я вроде и с ними пробовал - эффект тот же.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.07.2015, 17:47
Цитата Сообщение от chumich Посмотреть сообщение
работаю с Access 2003 через OleDb.
Ну ядрен-батон, с этого и надо было начинать!
В Access нет SELECT CASE.

Вместо этого используйте SWITCH:
SQL
1
2
3
4
5
6
7
8
UPDATE [Таблица] SET Поле = SWITCH
(
   Поле ='а2', 'а3', 
   Поле ='а1', 'а2', 
   Поле ='б2', 'б3', 
   Поле ='б1', 'б2', 
   1=1, CAST (Поле AS CHAR (255)) --Эквивалент ELSE, т.к. 1=1 всегда TRUE
)
1
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
26.07.2015, 17:54  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
В Access нет SELECT CASE
Да? А я думал SQL для всех един Сейчас попробую.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.07.2015, 17:58
Цитата Сообщение от chumich Посмотреть сообщение
я думал SQL для всех един
ANSI SQL — да, один и тот же.
Но у каждой СУБД есть свои примочки, которые не будут работать на других базах.

Это как с кодировкой: латинский алфавит правильно отображается в любой кодировке, а дальше — швах.
Так и с SQL: запрос, простроенный по стандарту ANSI, поймет любая СУБД.
1
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
26.07.2015, 18:43  [ТС]
Та же ошибка kolorotur, проверьте: всё ли так, может у меня уже глаз замылился? (это оригинал):
C#
1
bComm1.CommandText = "UPDATE [Личная карточка] SET Группа = SWITCH (Группа ='23С','33С', Группа ='13С','23С', Группа = '31С','41С', Группа = '21С','31С', Группа ='11С','21С', Группа ='35С','45С', Группа ='25С','35С', Группа ='15С','25С', 1=1, CAST (Группа AS CHAR (255))";
Добавлено через 19 минут
Скобку в конце еще одну забыл. Поставил, но результат не изменился
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
26.07.2015, 20:00
Лучший ответ Сообщение было отмечено chumich как решение

Решение

Цитата Сообщение от chumich Посмотреть сообщение
Та же ошибка
А CAST в Access есть?
Да и зачем там вообще что-то кастить, если нужно оставить текущее значение без изменения?

SQL
1
UPDATE [Личная карточка] SET Группа = SWITCH (Группа ='23С','33С', Группа ='13С','23С', Группа = '31С','41С', Группа = '21С','31С', Группа ='11С','21С', Группа ='35С','45С', Группа ='25С','35С', Группа ='15С','25С', 1=1, Группа)
1
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
26.07.2015, 20:16  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А CAST в Access есть?
Похоже, что нет Ну я его из вашего кода взял. А вы видимо из моего
Цитата Сообщение от kolorotur Посмотреть сообщение
нужно оставить текущее значение без изменения
Получилось, спасибо большое А то уж я отчаялся и, через цикл, обычный UPDATE/SET/WHERE запустил. Но так гораздо компактнее и удобней
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2015, 20:16
Помогаю со студенческими работами здесь

Не работает запрос Update.
Есть база Microsoft Access, в ней есть поле типа DateTime. На форме размещен DateTimePicter. В конструкторе запросов был создан запрос...

Запрос на Update с параметрами
Добрый день, возникла просто не понятная для меня ситуация, есть не связанная таблица и к ней я написал запрос на добавления данных и...

Не работает запрос Update
всем привет. Задание простое. нужно исправить сдесь ошыбку String qwe, qwe23; qwe23 = textBox2.Text; qwe =...

Простой запрос update
Запрос в запросе, по отдельности работает, а вместе не выходит. Пытаюсь его отработать в построителе VS 2012- ругается на select. По идее...

Update нескольких полей MS SQL
SqlCeCommand updt = new SqlCeCommand("update _" + group + " set SubName = "+subname+", Teacher = "+teacher+", AmountOfLes = " + amountOfLes...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru