IIF(...)不是一个被识别的内置函数。

30

我正在尝试在Microsoft SQL Server 2008 R2中使用此代码:

SET @SomeVar = @SomeOtherVar +
  IIF(@SomeBool, 'value when true', 'value when false')

但我出现了一个错误:

  

IIF(...)不是已知的内置函数名称

IIF()只与较新版本兼容吗?

是否有可以使用的替代函数?


2
如果BOL的页面在之前版本中存在,则该页面的大多数都会在标题下方显示一个名为"其他版本"的链接/下拉菜单。鉴于此页面上缺少该功能,我想这只是2012年的一个特性而已。 - Damien_The_Unbeliever
可能是[SQL Server 2008 IIF语句似乎未启用]的重复问题(https://dev59.com/YWgu5IYBdhLWcg3wJT5I) - podiluska
"IIF()" 是 MS Access 的一个函数。答案中描述的 "case" 语句是条件语句的 ANSI 标准方法。 - Gordon Linoff
3
提醒像我这样的蠢货:确保你没有在IIF的位置上打成了IFF。两个“是”的人赞成,一个不赞成。 - ruffin
4个回答

46

IIF 来自 SQL 2012。在此之前,您可以使用 CASE

SET @SomeVar = @SomeOtherVar + CASE
 WHEN @SomeBool
 THEN 'value when true'
 ELSE 'value when false'
END

1
你好,我正在尝试在SQL 2014中使用“IFF”,但是我一直收到相同的错误提示 - “IFF”不是一个被识别的内置函数名称。它在SQL 2014中已经被停用了吗?MSDN只提到了SQL 2012。(https://msdn.microsoft.com/en-us/library/hh213574(v=sql.110).aspx) - Koder101
13
函数应该是IIF而不是IFF。否则,请检查数据库的兼容性级别设置。 - Richard
@Richard 这总是让我困扰。 - xr280xr

9

SQL Server 2012有哪些新功能,编程增强

SQL Server 2012引入了14个新的内置函数。这些函数通过模拟许多桌面应用程序的表达式语言中的功能,简化了信息工作者的迁移路径。然而,这些函数对于经验丰富的SQL Server用户也是有用的。

...


4

如果IF语句不在SELECT之内,您也可以使用标准的IF语句。

例如:

DECLARE @Answer VARCHAR(3) = 'YES'

IF @Answer = 'Yes'
BEGIN 
--Do Something if true
END
ELSE
-- Do Soemthing if false

4

IIF在SQL Server 2008 R2及之前的版本中无效

IIF是在SQL Server 2012中引入的(文档页面上没有链接到之前的版本)。请注意,HTML标签已保留。


我已经在SQL Server中使用IIF超过20年了。但是在SQL Server 2008R2上无法使其工作。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接