内置功能IIF

时间:2016-07-05 15:22:00

标签: sql-server-2008

我已被要求将使用Access DB中的VBA项目迁移到带有SQL Server 2008 R2的VB.Net。我已经在其他线程中读到函数IIF不是这种SQL Server版本中的内置函数,创建它也不会帮助它,因为' ='运算符不能用于在第一个参数中表达布尔值,使用CASE的问题是某些IIF带有多个表达式来进行内部求值。

简而言之,这会产生错误," =运算符未定义"

Iif(Value1 = Value2, 'Some return', 'Another return')

如下所示的IIF表达式无法转换为CASE表达式。

Iif((Value1 = Value2) And (Value3 = Value4), 'Value to return if true', 'Value to return if false')

我目前正在创建存储过程并利用编程结构来克服这个问题,但由于存在大量嵌套的IIF,因此它似乎效率低下。

我的问题是,有更有效的方法吗?或者我应该坚持使用存储过程吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的IIF次调用可以转换为CASE个词组:

IIF(Value1 = Value2, 'Some return', 'Another return')
IIF((Value1 = Value2) AND (Value3 = Value4), 'Value to return if true', 'Value to return if false')

可以改写为

CASE WHEN Value1 = Value2 THEN 'Some return' ELSE 'Another return' END

CASE WHEN (Value1 = Value2) AND (Value3 = Value4)
     THEN 'Value to return if true'
     ELSE 'Value to return if false'
END