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 break
because 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
@test
is only ever 2
@test
只是永远 2
回答by RedFilter
This is not necessary. THEN
effectively acts as a return or break, so the statement is short-circuited.
这是没有必要的。THEN
有效地充当返回或中断,因此该语句是短路的。