Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near ) / 8 сообщений из 8, страница 1 из 1
16.02.2022, 19:16
    #40134627
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
Друзья,
поддержите мое обращение в 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
16.02.2022, 23:53
    #40134682
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
Павел Фурсов,

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

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


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

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

Такое никто не будет править, это незначительная проблема, которую легко исправить корректировкой текста.
...
Рейтинг: 0 / 0
18.02.2022, 13:32
    #40135133
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
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
18.02.2022, 14:20
    #40135149
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
Павел Фурсов,

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

Ps всё равно MS это будет исправлять еще лет 5
...
Рейтинг: 0 / 0
18.02.2022, 16:45
    #40135185
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near )
Павел Фурсов
Иногда без них написать выражение невозможно. Например, вот такое:
Код: 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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ошибка в SSDT - IIF в условии - SQL46010: Incorrect syntax near ) / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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