【问题标题】:IIF(...) not a recognized built-in functionIIF(...) 不是公认的内置函数
【发布时间】:2012-08-15 15:07:04
【问题描述】:

我正在尝试在 Microsoft SQL Server 2008 R2 中使用它:

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

但我得到一个错误:

IIF(...) 不是可识别的内置函数名

IIF() 是否只兼容更高版本?

我可以使用其他功能吗?

【问题讨论】:

  • 如果项目在以前的版本中存在,大多数 BOL 页面的标题下方都有一个“其他版本”链接/下拉菜单。鉴于此页面上没有,我想说这只是 2012 年的功能。
  • IIF() 是一个 MS Access 函数。答案中描述的case 语句是执行条件语句的ANSI 标准方式。
  • 注意像我这样的笨蛋:确保你没有输入IFF 代替IIF。两个是的。一个没有。

标签: sql sql-server-2008 tsql sql-server-2005 sql-server-2008-r2


【解决方案1】:

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

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

【讨论】:

  • 嗨,我正在尝试在 SQL 2014 中使用 'IFF',但是,我遇到了同样的错误 - “IFF' 不是可识别的内置函数名称。”它是否在 SQL 2014 中停止使用...? MSDN 仅提及 SQL 2012。(msdn.microsoft.com/en-us/library/hh213574(v=sql.110).aspx)
  • 函数是IIF,而不是IFF。否则,请检查数据库上的兼容性级别设置。
【解决方案2】:

SQL Server 2012 中的新增功能,Programmability Enhancements

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

...

【讨论】:

    【解决方案3】:

    IIF 对于 SQL Server 2008 R2 和之前的任何版本无效

    IIF 是在 SQL Server 2012 中引入的(我链接到的文档页面上没有指向以前版本的链接)。

    【讨论】:

    • 我在 SQL Server 中使用 IIF 已有 20 多年了。但无法让它在 SQL Server 2008R2 上运行
    【解决方案4】:

    如果它在选择之外,您也可以使用标准 IF 语句。

    例如

    DECLARE @Answer VARCHAR(3) = 'YES'
    
    IF @Answer = 'Yes'
    BEGIN 
    --Do Something if true
    END
    ELSE
    -- Do Soemthing if false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2019-06-05
      • 2016-12-01
      • 1970-01-01
      相关资源
      最近更新 更多