Ответ 1
Как говорили другие, IIF поставляется с SQL 2012. До этого вы можете использовать CASE
:
SET @SomeVar = @SomeOtherVar + CASE
WHEN @SomeBool
THEN 'value when true'
ELSE 'value when false'
END
Я пытаюсь использовать это в Microsoft SQL Server 2008 R2:
SET @SomeVar = @SomeOtherVar +
IIF(@SomeBool, 'value when true', 'value when false')
Но я получаю сообщение об ошибке:
IIF(...)
не является признанным встроенным именем функции
Является IIF()
совместимым только с более поздней версией?
Есть ли альтернативная функция, которую я могу использовать?
Как говорили другие, IIF поставляется с SQL 2012. До этого вы можете использовать CASE
:
SET @SomeVar = @SomeOtherVar + CASE
WHEN @SomeBool
THEN 'value when true'
ELSE 'value when false'
END
Что нового в SQL Server 2012, Улучшения в программировании:
SQL Server 2012 представляет 14 новых встроенных функций. Эти функции облегчают путь миграции для информационных работников, эмулируя функциональность, которая находится на языках выражений многих настольных приложений. Однако эти функции также будут полезны опытным пользователям SQL Server.
...
IIF
не, действительный для SQL Server 2008 R2 и любой версии до этого.
IIF
был представлен в SQL Server 2012 (ссылка на предыдущие версии отсутствует на странице документации, к которой я привязался).
Вы также можете использовать стандартную инструкцию IF, если она вне выбора.
например.
DECLARE @Answer VARCHAR(3) = 'YES'
IF @Answer = 'Yes'
BEGIN
--Do Something if true
END
ELSE
-- Do Soemthing if false