我已被要求将使用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,因此它似乎效率低下。
我的问题是,有更有效的方法吗?或者我应该坚持使用存储过程吗?
提前致谢。
答案 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