4

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

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。感谢您的任何指导。

4

2 回答 2

6

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

从您的示例中,可以推断出@B 或@c 为零。

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

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

于 2013-10-02T16:23:45.433 回答
1

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

  1. 是 @A < 0.01,TRUE 继续在同一行,而 FALSE 转到下一行。
  2. 如果 1 为 TRUE,则评估 @B < 0.01,TRUE 返回 -1,case 语句结束,而 FALSE 进入下一行。
  3. 如果你在这里 1 或 2 是 FALSE,无论哪种方式 @A < 0.01 仍然会再次评估,如果 TRUE 返回 @B 并且 case 语句结束而 FALSE 返回 @C 因为所有 WHEN 语句都是 FALSE。

希望这可以帮助。

于 2013-10-02T16:22:50.390 回答