SQL Case语句中的操作优先顺序是什么?

时间:2013-10-02 16:12:19

标签: sql sql-server

我有时间发现如何最好地编写以下内容:

SET @SAMPLE = (SELECT CASE
WHEN @A < 0.01 AND @B < 0.01 THEN -1
WHEN @A < 0.01 THEN @B
ELSE @C
END )

我没有达到我的期望。运行后我发现@SAMPLE包含0.00。感谢您提供任何指导。

2 个答案:

答案 0 :(得分:5)

  

CASE语句按顺序评估其条件并停止   满足条件满足的第一个条件

从你的例子来看,所有可以推断的是@B或@c为零。

操作优先级通常是指首先评估哪个运算符(例如“*”或“ - ”)。您的问题应该标题为“案例评估顺序”。

http://technet.microsoft.com/en-us/library/ms181765.aspx

答案 1 :(得分:1)

没有价值观,我无法确定这是你的意思,但似乎你在问一个案例陈述评估其WHEN条款的顺序。如果这确实是问题,那么答案就相当简单。 CASE WHEN将返回第一个WHEN的THEN语句的值为true,并在返回后立即停止计算。这意味着在您的示例中@Sample将首先评估WHEN以持续WHEN(并且在WHEN中从左到右评估),以便您的逻辑检查是:

  1. 是@A&lt; 0.01,TRUE在同一行继续,而FALSE到达下一行。
  2. 如果1为TRUE则为@B&lt;计算0.01,TRUE返回-1,case语句结束,而FALSE返回下一行。
  3. 如果你在这里1或2是假的,无论是@A&lt;如果TRUE返回@B并且case语句结束而FALSE返回@C,则仍会再次计算0.01,因为所有WHEN语句都为FALSE。
  4. 希望这有帮助。