powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
8 сообщений из 8, страница 1 из 1
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40134627
Друзья,
поддержите мое обращение в Developer Community по поводу ошибки SSDT в VS2019/2022.

IIF in condition - SQL46010: Incorrect syntax near )

Там мне отвечает только бот:
Feedback BotI detected that this issue hasn’t received a lot of activity, votes, or comments in the past 90 days. Based on this, the issues severity and affected area, it’s my experience that this issue is unlikely to get fixed. To improve the situation, consider following best practices for quality problem reports, and giving us more details on how this issue is impacting you.

Проблема была озвучена еще в 2018-м году на другом форуме Microsoft. Однако, воз и ныне там.

Суть вот в чем:
При работе с проектом баз данных в VS2019 я получаю ошибку компиляции, хотя с точки зрения SQL Server код корректный.
В SSMS никакой ошибки тоже нет.

Ошибка связана с использованием функции IIF в условиях IF ..., WHERE ..., CASE WHEN ....
Если вокруг IIF нет скобок, то все ок, а если есть скобки, то получаем ошибку. В SELECT ... такой ошибки нет.
Пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create procedure test
as
	select
		  iif(1 = 0, 1, 0), --ok
		( iif(1 = 0, 1, 0) ) --ok

	if	  iif(1 = 0, 1, 0)   <> 0 --ok
	or	( iif(1 = 0, 1, 0) ) <> 0 --Error:  SQL46010: Incorrect syntax near ).
		select	1

	select	1
	where
		  iif(1 = 0, 1, 0)   <> 0 --ok
	or	( iif(1 = 0, 1, 0) ) <> 0 --Error:  SQL46010: Incorrect syntax near ).

	select
		case
			when   iif(1 = 0, 1, 0)   <> 0 then 1 --ok
			when ( iif(1 = 0, 1, 0) ) <> 0 then 1 --Error:  SQL46010: Incorrect syntax near ).
		end
go


Только, пожалуйста, не предлагайте мне убрать скобки или заменить IIF на CASE.

Оригинал обращения на англ.языке:
Pavel FursovI have this error in SSDT (VS2017/VS2019/VS2022).

The problem is caused by the enclosing parentheses around IIF in condition.

An example to reproduce the issue:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create procedure test
as
	if	  iif(1 = 0, 1, 0)   <> 0 --ok
	or	( iif(1 = 0, 1, 0) ) <> 0 --Error:  SQL46010: Incorrect syntax near ).
		select	1

	select	1
	where
		  iif(1 = 0, 1, 0)   <> 0 --ok
	or	( iif(1 = 0, 1, 0) ) <> 0 --Error:  SQL46010: Incorrect syntax near ).

	select
		case
			when   iif(1 = 0, 1, 0)   <> 0 then 1 --ok
			when ( iif(1 = 0, 1, 0) ) <> 0 then 1 --Error:  SQL46010: Incorrect syntax near ).
		end
go

Earlier link from Forum dated March 16, 2018:
SQL46010: Incorrect syntax near )

Заранее спасибо.

С уважением,
Павел Фурсов
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40134682
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Фурсов,

просто ради интереса а зачем вам скобки вокруг iif?
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40134701
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Фурсов

Только, пожалуйста, не предлагайте мне убрать скобки или заменить IIF на CASE.


Вот нахера тебя "поддерживать"?

case ему, видите ли, не нравится.
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40134712
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
просто ради интереса а зачем вам скобки вокруг iif?
Можно предположить, что это генератор запросов так делает.
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40134766
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не сталкивался с такой конструкцией, но помню, что ошибку синтаксисе при использовании функции, возвращающей номер секции таблицы, очень долго исправляли.

Такое никто не будет править, это незначительная проблема, которую легко исправить корректировкой текста.
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40135133
felix_ff
просто ради интереса а зачем вам скобки вокруг iif?

Иногда без них написать выражение невозможно. Например, вот такое:
Код: sql
1.
2.
3.
4.
case when (sum(iif(isnull(z, 0) <> 555, a, 0)) + isnull(d, 0)) % r <> 0
	then r * round(((sum(iif(isnull(z, 0) <> 555, a, 0)) + isnull(d, 0)) / r), 0)
	else sum(iif(isnull(z, 0) <> 555, a, 0)) + isnull(d, 0)
end as k
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40135149
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Фурсов,

Почему невозможно? Забабахайте 20 case'ов.

Ps всё равно MS это будет исправлять еще лет 5
...
Рейтинг: 0 / 0
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
    #40135185
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Фурсов
Иногда без них написать выражение невозможно. Например, вот такое:
Код: sql
1.
2.
3.
4.
case when (sum(iif(isnull(z, 0) <> 555, a, 0)) + isnull(d, 0)) % r <> 0
	then r * round(((sum(iif(isnull(z, 0) <> 555, a, 0)) + isnull(d, 0)) / r), 0)
	else sum(iif(isnull(z, 0) <> 555, a, 0)) + isnull(d, 0)
end as k

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
case when (sum(x.v) + isnull(d, 0)) % r <> 0
	then r * round(((sum(x.v) + isnull(d, 0)) / r), 0)
	else sum(x.v) + isnull(d, 0)
end as k
from
 ...
 cross apply (select iif(z <> 555, a, 0)) x(v)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]