Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
tveritin
Зарегистрирован: 26.01.2016 Сообщения: 191 Откуда: Санкт-Петербург
|
Добавлено: Чт Фев 17, 2022 12:12 Заголовок сообщения: end заменяется на } |
|
|
При выполнении конструкции
Код: | select case '1' when '1' then 'класс 3.3 (вредные условия труда 3 степени)' else '' end |
ошибка
Код: | Incorrect syntax near '}' |
хотя никакой скобки нет. В MSSMS запрос выполняется без ошибок.
Выполняю через shift-f1 по F8 |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1690
|
Добавлено: Чт Фев 17, 2022 13:57 Заголовок сообщения: |
|
|
А так?
select (case '1' when '1' then 'класс 3.3 (вредные условия труда 3 степени)' else '' end) |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1690
|
Добавлено: Чт Фев 17, 2022 14:51 Заголовок сообщения: |
|
|
Писали люди документацию по Дизайнеру ... старались ....
«Круглые» операторные скобки
В указанных скобках происходит "сквозная" обработка переменных и функций, в отличие от последовательного выполнения кода. Это может приводить к запутанности и тяжелой отладке. Поэтому применение круглых скобок должно быть сведено к минимуму - только там, где это действительно требуется. К устаревшим операторным скобкам относится конструкция круглые скобки и кавычки ("Х-язык") - применять данную конструкцию не рекомендуется. Также не рекомендуется окружать код операторами: «BEGIN Х-язык END». Из-за возможности использования вышеуказанных операторов, конструкцию CASE ... END языка SQL требуется писать только в круглых скобках. |
|
Вернуться к началу |
|
 |
tveritin
Зарегистрирован: 26.01.2016 Сообщения: 191 Откуда: Санкт-Петербург
|
Добавлено: Чт Фев 17, 2022 15:24 Заголовок сообщения: |
|
|
В этом случае сработало.
Но, вот случай другой:
Код: | select 'Условия труда на рабочем месте Работника: ' + (case '1' when '1' then 'класс 1 (оптимальные условия труда)'
when '2' then 'класс 2 (допустимые условия труда)'
when '3.1' then 'класс 3.1 (вредные условия труда 1 степени)'
when '3.2' then 'класс 3.2 (вредные условия труда 2 степени)'
when '3.3' then 'класс 3.3 (вредные условия труда 3 степени)'
when '3.4' then 'класс 3.4 (вредные условия труда 4 степени'
when '4' then 'класс 4 (опасные условия труда)'
else null end) as _Work_Cond |
Вроде бы и case в скобках, но пока не заключишь в скобки всё выражение, работать не хочет.
Код: | select ('Условия труда на рабочем месте Работника: ' + (case '1' when '1' then 'класс 1 (оптимальные условия труда)'
when '2' then 'класс 2 (допустимые условия труда)'
when '3.1' then 'класс 3.1 (вредные условия труда 1 степени)'
when '3.2' then 'класс 3.2 (вредные условия труда 2 степени)'
when '3.3' then 'класс 3.3 (вредные условия труда 3 степени)'
when '3.4' then 'класс 3.4 (вредные условия труда 4 степени'
when '4' then 'класс 4 (опасные условия труда)'
else null end)) as _Work_Cond |
По меньшей мере, странно. |
|
Вернуться к началу |
|
 |
vviktor
Зарегистрирован: 09.01.2019 Сообщения: 105 Откуда: Пермь
|
Добавлено: Чт Фев 17, 2022 15:42 Заголовок сообщения: |
|
|
пропущена скобка для класса 3.4 |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1690
|
Добавлено: Чт Фев 17, 2022 15:43 Заголовок сообщения: |
|
|
Ну да, ну да ... А здесь скобку кто-то украл?
when '3.4' then 'класс 3.4 (вредные условия труда 4 степени' |
|
Вернуться к началу |
|
 |
tveritin
Зарегистрирован: 26.01.2016 Сообщения: 191 Откуда: Санкт-Петербург
|
Добавлено: Чт Фев 17, 2022 16:18 Заголовок сообщения: |
|
|
Так это строка, в ней может быть что угодно.
Содержимое строки не должно влиять на работоспособность конструкции.
Я знаю, что закрывающей скобки в значении не было. |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1690
|
Добавлено: Чт Фев 17, 2022 16:30 Заголовок сообщения: |
|
|
Вот так работает. Без круглых скобок на всё выражение. Вопрос-то в чем?
select 'Условия труда на рабочем месте Работника: ' + (case '1' when '1' then 'класс 1 (оптимальные условия труда)'
when '2' then 'класс 2 (допустимые условия труда)'
when '3.1' then 'класс 3.1 (вредные условия труда 1 степени)'
when '3.2' then 'класс 3.2 (вредные условия труда 2 степени)'
when '3.3' then 'класс 3.3 (вредные условия труда 3 степени)'
when '3.4' then 'класс 3.4 (вредные условия труда 4 степени)'
when '4' then 'класс 4 (опасные условия труда)'
else null end) as _Work_Cond |
|
Вернуться к началу |
|
 |
tveritin
Зарегистрирован: 26.01.2016 Сообщения: 191 Откуда: Санкт-Петербург
|
Добавлено: Чт Фев 17, 2022 16:35 Заголовок сообщения: |
|
|
Обходные варианты найдены, но хотелось бы понять почему скобки внутри значения строки ломают работоспособность всей конструкции.
Скобки внутри значения не являются "операторными". |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1690
|
Добавлено: Чт Фев 17, 2022 17:43 Заголовок сообщения: |
|
|
Так работает наша клиентская часть.
Считаются открывающие и закрывающие скобки. Синтаксис SQL-оператора не анализируется. |
|
Вернуться к началу |
|
 |
|