SQL Server IIF 与 CASE

Posted

技术标签:

【中文标题】SQL Server IIF 与 CASE【英文标题】:SQL Server IIF vs CASE 【发布时间】:2014-05-15 09:03:23 【问题描述】:

我最近了解了 SQL Server 2012 中 IIF 函数的可用性。我总是在查询中使用嵌套的 CASE。我想知道IIF 语句的确切用途,以及我们何时应该更喜欢在查询中使用IIF 而不是CASE 语句。 我在查询中主要使用嵌套的CASE

感谢所有输入。

【问题讨论】:

IIF 只是简单 CASE 语句的简写。它甚至被翻译成用于查询优化和执行的case语句:technet.microsoft.com/en-us/library/hh213574.aspx 很遗憾,速记不是标准的一部分(现在是什么?ANSISQL?),因为它更容易阅读。但是后来T-SQL一直有点……“罗嗦”。 【参考方案1】:

IIFCASE WHEN <Condition> THEN <true part> ELSE <false part> END 相同。查询计划将是相同的。它可能是最初实现的“语法糖”。

CASE 可跨所有 SQL 平台移植,而 IIF 是 SQL SERVER 2012+ 特定的。

【讨论】:

可能是为了让 Access/VB 开发人员更容易记住语法。【参考方案2】:

IIF 是一个非标准的 T-SQL 函数。它被添加到 SQL SERVER 2012,以便 Access 可以迁移到 SQL Server,而无需事先将 IIF 重构为 CASE。一旦 Access db 完全迁移到 SQL Server 中,您就可以重构了。

【讨论】:

我喜欢你的推理。你能引用一些文档来支持它吗?

以上是关于SQL Server IIF 与 CASE的主要内容,如果未能解决你的问题,请参考以下文章

Firebird/Lazarus SQL 视图与选择 iif?

SQL Server 视图中的条件计算列

Access IIF 到 SQL 语句的转换

SQL - 选择语句之外的 IIF 子句?

将 SQL IIF 转换为 Redshift

SQL 查询语句 IIF()处理条件判断