T-SQL 中的 case 语句中断
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6153853/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
break in case statement in T-SQL
提问by esquare
Is possible using break command in case statement in mssql?
是否可以在 mssql 中的 case 语句中使用 break 命令?
Because the condition is verified that expression GO, instead of doing the next CASE's transition.
ssip_miktar is 5, ssip_teslim_miktar is 0 and S74MIKTAR is 5
因为条件是验证表达式GO,而不是做下一个 CASE 的转换。ssip_miktar 为 5,ssip_teslim_miktar 为 0,S74MIKTAR 为 5
update set ssip_teslim_miktar= ssip_teslim_miktar+
CASE WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR-ssip_miktar
WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR-(ssip_miktar+ssip_teslim_miktar)
WHEN ssip_miktar=@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR
WHEN ssip_miktar=@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR-ssip_teslim_miktar
WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR
WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR
END,
@S74MIKTAR=@S74MIKTAR-CASE
WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR-ssip_miktar
WHEN ssip_miktar<@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR-(ssip_miktar+ssip_teslim_miktar)
WHEN ssip_miktar=@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR
WHEN ssip_miktar=@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR-ssip_teslim_miktar
WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar=0 THEN @S74MIKTAR
WHEN ssip_miktar>@S74MIKTAR AND ssip_teslim_miktar>0 THEN @S74MIKTAR
ELSE 0
END
where ssip_teslim_miktar<ssip_miktar
回答by Phil Gan
You shouldn't need to use a breakbecause SQL Case statements don't fall through.
您不需要使用 abreak因为 SQL Case 语句不会失败。
DECLARE @x int
SET @x = 0
SELECT CASE
WHEN @x = 0 THEN 'zero' -- Only this line of the expression is evaluated
WHEN @x <> 0 THEN 'not-zero'
END
回答by James Wiseman
This is transactional SQL and is not iterative. It does not require a break because only one of the when/else clauses will be evaulated.
这是事务性 SQL,不是迭代的。它不需要中断,因为只会评估 when/else 子句之一。
Try the following:
请尝试以下操作:
declare @test int
set @test=1
select @test = @test +
case
when 1=1 then 1
when 2=2 then 1
when 3=3 then 1
when 4=4 then 1
when 5=5 then 1
when 6=6 then 1
when 7=7 then 1
when 8=8 then 1
else 1
end
select @test
@testis only ever 2
@test只是永远 2
回答by RedFilter
This is not necessary. THENeffectively acts as a return or break, so the statement is short-circuited.
这是没有必要的。THEN有效地充当返回或中断,因此该语句是短路的。

