Sql Server系列:流程控制語句

libingql發表於2014-11-30

  T-SQL中用來編寫流程控制模組的語句有:BEGIN...AND語句、IF...ELSE語句、CASE語句、WHILE語句、GOTO語句、BREAK語句、WAITFOR語句和RETURN語句。

1 BEGIN...AND語句

  語句塊是多條Transact-SQL語句組成的程式碼段,從而可以執行一組Transact-SQL語句。BEGIN和END是控制流語言的關鍵字。BEGIN...END語句塊通常包含在其他控制流程中,用來完成不同流程中有差異的程式碼功能。

  示例:

DECLARE @count INT
SELECT @count = 0
WHILE @count < 10
BEGIN
    PRINT 'count = ' + CONVERT(VARCHAR(10), @count)
    SELECT @count = @count + 1
END

PRINT 'loop finished, count = ' + CONVERT(VARCHAR(10), @count)

  執行結果:

count = 0
count = 1
count = 2
count = 3
count = 4
count = 5
count = 6
count = 7
count = 8
count = 9
loop finished, count = 10

2 IF...ELSE語句

  IF...ELSE語句用於在執行一組程式碼之前進行條件判斷,根據判斷的結果執行不同的程式碼。IF...ELSE語句語句對布林表示式進行判斷,如果布林表示式返回為TRUE,則執行IF關鍵字後面的語句塊;如果布林表示式返回FALSE,則執行 ELSE關鍵字後面的語句塊。

  語法:

IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ] 

  示例:

DECLARE @score INT
SET @score = 100
IF @score >= 60
    PRINT '及格'
ELSE
    PRINT '不及格'

3 CASE語句

  CASE語句是多條件分支語句,相比IF...ELSE語句,CASE語句進行分支流程控制可以使程式碼更加清晰,易於理解。CASE語句根據表示式邏輯值的真假來決定執行的程式碼流程。

  語法:

CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

  示例:

DECLARE @score INT
SET @score = 100

SELECT CASE @score 
            WHEN 100 THEN '滿分'
            WHEN 60 THEN '及格'
        END
        AS '成績'
DECLARE @score INT
SET @score = 100

SELECT CASE 
            WHEN @score >= 90 THEN '優秀'
            WHEN @score >= 80 THEN '良好'
            WHEN @score >= 70 THEN '中等'
            WHEN @score >= 60 THEN '及格'
            ELSE '不及格'
        END
        AS '成績'

4 WHILE語句

  WHILE語句根據條件重複執行一條或多條T-SQL程式碼,只要條件表示式為真,就迴圈執行語句。可以使用 BREAK 和 CONTINUE 關鍵字在迴圈內部控制 WHILE 迴圈中語句的執行。

  語法:

WHILE Boolean_expression 
     { sql_statement | statement_block | BREAK | CONTINUE } 

  引數:

  Boolean_expression:返回 TRUE 或 FALSE 的表示式。 如果布林表示式中含有 SELECT 語句,則必須用括號將 SELECT 語句括起來。
  {sql_statement | statement_block}:Transact-SQL 語句或用語句塊定義的語句分組。 若要定義語句塊,請使用控制流關鍵字 BEGIN 和 END。
  BREAK:導致從最內層的 WHILE 迴圈中退出。 將執行出現在 END 關鍵字(迴圈結束的標記)後面的任何語句。
  CONTINUE:使 WHILE 迴圈重新開始執行,忽略 CONTINUE 關鍵字後面的任何語句。

5 WAITFOR語句

  語法:

WAITFOR 
{
    DELAY 'time_to_pass' 
  | TIME 'time_to_execute' 
  | [ ( receive_statement ) | ( get_conversation_group_statement ) ] 
    [ , TIMEOUT timeout ]
}

5.1 DELAY引數

  DELAY引數指定了等待的時間段。不能指定天數,只能指定小時數、分鐘數和秒數。允許延遲的最長時間為24小時。

WAITFOR DELAY '01:00'

  將執行WAITFOR語句前的任何程式碼,然後到達WAITFOR語句,停止1小時,之後繼續執行下一條語句中的程式碼。

5.2 TIME引數

  TIME引數指定到達指定時間的等待時間。

WAITFOR TIME '01:00'

  將執行WAITFOR語句前的任何程式碼,然後到達WAITFOR語句,直到凌晨1點停止執行,之後執行WAITFOR語句後的下一條語句。

相關文章