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語句后的下一條語句。