最近,我被分配负责对一个在我到来之前编写的项目进行一些重大的重构工作。其中一部分重构涉及浏览一些存储过程并对它们进行清理,并对它们的行为进行一些一般性的更改。最近我遇到了以下声明:
IF
CASE
WHEN EXISTS
(
SELECT *
FROM users
WHERE Username = 'admin'
) THEN 1
ELSE 0
END <> 0
//Do something here
经过一段时间的观察和一些调查研究,我最终得出的结论是,上述代码的逻辑可以通过以下方式实现:
IF EXISTS (
SELECT *
FROM users
WHERE Username = 'admin'
)
//Do something here
所以我的问题是:使用case语句有什么优势呢?相比if语句,它似乎更加臃肿且难读懂。我是否错了,这两个查询是等价的,是否存在它们会有不同行为的情况?顺便说一下,我并不特别关注在使用case语句而不是if语句的性能优势。但是对于那些在寻找这方面信息的人,这里有一个很好的回答。
IF
语句是否有快捷方式。如果它们有快捷方式,那么IF()OR()OR()与CASE一样优化。我们知道CASE在第一个检查时就会快速跳过。我想把这个发表在答案中,但我实际上不确定TSQL是如何处理的。我认为你可以用一个插入值并返回true的函数进行简单的测试,然后用不同的参数运行两次,看看是否都被插入。显然,对于一个要测试的条件,这并不重要。 - woot