[MSSQL] while與break/continue用法

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的資訊

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You may also like these