Hits: 2298
筆記一下在MSSQL中使用while與break/continue的用法達到流程控制的效果
狀況1
我有1-10的數字,我要略過4,並且執行到8就停止
declare @i int = 0
while @i <= 10
begin
set @i = @i + 1
if @i = 4
continue
if @i = 8
break
print('current digit: ' + convert(varchar, @i))
end
------[RESULT]------
current digit: 1
current digit: 2
current digit: 3
current digit: 5
current digit: 6
current digit: 7
------[RESULT]------
- 在數字是4的時候,略過不執行,這就是
while...continue
的功用 - 在數字是8的時候,跳出迴圈,不執行後面的9, 10,這就是
while...break
的功用,break會把目前的while整段跳出,任何在while裡面的指令通通都會不執行
狀況1-1: while與break
這邊岔題講一下while與break的測試,根據官方文件定義,break會結束最內層的 WHILE 迴圈。 將執行出現在END 關鍵字 (表示迴圈結束) 之後的任何陳述式。
直接用指令來理解這段文字吧:
# 範例A
DECLARE @X INT = 1;
PRINT 'Start'
WHILE @X = 1
BEGIN
-- Outer IF.
IF 1 = 1
BEGIN
-- Inner IF.
IF 2 = 2
BEGIN
--BREAK
PRINT '2'
END
PRINT '1'
END
SET @X = @X + 3;
print @X
END
PRINT 'End'
------[RESULT]------
Start
2
1
4
End
------[RESULT]------
從上面的範例A我們可以看到,沒有break的情況下,除了印出while迴圈外的Start與End,也印出while迴圈內的2, 1, 4,那我們來看看下面範例B的結果:
# 範例B
DECLARE @X INT = 1;
PRINT 'Start'
WHILE @X = 1
BEGIN
-- Outer IF.
IF 1 = 1
BEGIN
-- Inner IF.
IF 2 = 2
BEGIN
BREAK
PRINT '2'
END
PRINT '1'
END
SET @X = @X + 3;
print @X
END
PRINT 'End'
------[RESULT]------
Start
End
------[RESULT]------
範例B的結果可以看到,只印出了while迴圈外的Start與End,while迴圈內的2, 1, 4沒有印出來。這就是break的用處
狀況2: 在4的時候新增訊息’4 IS PASS’
declare @i int = 0
while @i <= 10
begin
set @i = @i + 1
if @i = 4
print('4 IS PASS')
continue
if @i = 8
print('8 IS BREAK')
break
print('current digit: ' + convert(varchar, @i))
end
------[RESULT]------
4 IS PASS
------[RESULT]------
- 可以看出來,while迴圈只執行到print(‘4 IS PASS’)就停了,其他後續的東西通通沒有繼續跑,原因是在if else中,後面只能執行單行的指令(sql_statement),在官方文件中定義,若要執行多行指令(statement_block),需要用
begin...end
來包括
狀況2(改)
declare @i int = 0
while @i <= 10
begin
set @i = @i + 1
if @i = 4
begin
print('4 IS PASS')
continue
end
if @i = 8
break
print('current digit: ' + convert(varchar, @i))
end
------[RESULT]------
current digit: 1
current digit: 2
current digit: 3
4 IS PASS
current digit: 5
current digit: 6
current digit: 7
------[RESULT]------
- 用begin…end來包住print與continue,可以發現到,成功的略過把4印出來,而且成功的印出4 IS PASS的資訊
Comments