2015-08-12 2 views
2

Я не могу понять, почему это неправильно. Синтаксис для МФЛ определен здесь:«IN» внутри «IFF» дает синтаксическую ошибку

https://msdn.microsoft.com/en-us/library/hh213574.aspx

enter image description here

Почему жалуются на оператора IN?

+0

Что SQL сервер версии? Согласно документации 'iif' доступен с 2012 года и выше! –

+3

Какая версия SSMS? 'select *, IIF (o.name IN ('xyz', 'bar'), 1,0) из sys.objects o' отлично работает для меня. –

+1

@MartinSmith, исправлено. Спасибо;) –

ответ

1

Похоже, вы используете версию SQL Server, которая не поддерживает эту функцию (до SQL Server 2012). В качестве альтернативы можно использовать случай заявление вроде так:

Select NEWID(), m.MALEPUNKTYPE, 
     case when m.MALEPUNKTYPE in ('E17', 'E18') then 'D02' else null end 
from AMALD m 

Это поддерживается с SQL Server 2005 года, однако он должен работать на более ранних версиях слишком

+0

Ни один из «CASE» или «IN» не был новым в 2005 году. Вышеприведенный код должен работать и на SQL Server 2000, а также на ранних версиях. Если вы считаете, что SQL Server 2005 является самой старой поддерживаемой версией SQL Server в настоящее время, это просто похоже на настройку для вас, чтобы вы постоянно редактировали этот вопрос, поскольку более старые версии выпадают из поддержки. –

+0

Справедливая точка зрения, я просто взглянул на то, что MSDN сказал о поддерживаемых версиях, и отметил 2005 как самое раннее. Я обновлю ответ –

+0

Спасибо. Это решило проблему. Я переписал запрос. –