用SQL中的IF语句替换CASE语句

时间:2014-05-29 19:07:52

标签: sql sql-server

最近,我的任务是在我到达之前对一个项目进行一些重大的重构。这种重构的一部分涉及通过一些存储过程并清理它们并对其行为进行一些一般性更改。我最近发现了以下声明:

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语句的性能优势并不十分关注。但对于那些发现自己在此页面上寻找的人,there's a good answer here about it

2 个答案:

答案 0 :(得分:1)

如果可以假设在相对较短的时间内需要多个条件,那么可维护性。

几乎是我能想到的唯一原因;)

答案 1 :(得分:0)

这里的一些评论中有很多错误的信息。幸运的是,你确实把它改成了&#34; IF&#34;声明,但对于此页面的未来观众:

  1. 请在此处查看@ damien-the-unbeliever关于问题的第一条评论:MS SQL - CASE vs IF performance

  2. 请在此处查看论坛主题(仅限前几篇文章):http://www.sqlservercentral.com/Forums/Topic1206250-392-1.aspx

  3. 基本上,IF/ELSE 语句CASE 表达式是语言的两个根本不同的部分,不能互换使用。 IF/ELSE用于批处理或存储过程中的控制流程; CASE用于选择&#34; SELECT或类似操作中的数据值。