概述
和其他高階語言一樣,t-sql中也有用於控制流程的語句。t-sql中的流程控制語句進一步擴充套件了t-sql的力量……使得大部分業務邏輯可以在資料庫層面進行。但很多人對t-sql中的流程控制語句並沒有系統的了解,本篇文章會系統的對t-sql語句中的流程控制語句進行系統講解。
基本概念
在沒有流程控制語句的情況下,t-sql語句是按照從上到下的順序逐個執行:
使用流程控制語句可以讓開發人員可以基於某些邏輯進行選擇性的跳轉,實現了類似高階語言的跳轉結構:
流程控制語句的使用範圍和go關鍵字
流程控制語句只能在單個批處理段(batch),使用者自定義函式和儲存過程中使用。不能跨多個批處理段或者使用者自定義函式和儲存過程。
因為這裡重點講到t-sql查詢語句,所以這裡只講批處理段(batch).
乙個批處理段是由乙個或者多個語句組成的乙個批處理,之所以叫批處理是因為所有語句一次性被提交到乙個sql例項。在這個批處理範圍內,區域性變數是互相可見的。
而想讓多個語句分多次提交到sql例項,則需要使用go關鍵字。go關鍵字本身並不是乙個sql語句,go關鍵字可以看作是乙個批處理結束的識別符號,當遇到go關鍵字時,當前go之前的語句會作為乙個批處理直接傳到sql例項執行。所以不在同乙個批處理內區域性變數不可見,也不可對跨批處理的語句使用流程控制語句.
在同乙個批處理中區域性變數互相可見:
在不同批處理中區域性變數不可見:
在不同批處理中,流程控制語句不能跨批處理:
t-sql中的8個流程控制語句關鍵字
在t-sql中,與流程控制語句相關的關鍵字有8個:
begin...end
break
goto
continue
if...else
while
return
waitfor
下面對上述關鍵字進行挨個講解
begin…end關鍵字
begin…end關鍵字也是流程控制語句需要用到的最基本關鍵字,用於將多個語句劃分成邏輯上的一部分。其實可以直接理解成類c語言中的花括號(「{}"「)
while/break/continue關鍵字
在t-sql的流程控制語句中,迴圈語句只有while迴圈,並沒有傳統高階語言的for和switch迴圈。while除了被用於流程控制語句的迴圈之外,還經常被用於游標之中。
while關鍵字和高階語言中的while關鍵字幾乎完全一樣。while迴圈中可以利用break和continue關鍵字對迴圈進行控制。
continue關鍵字用於結束本次迴圈,直接開始下一次迴圈。
break關鍵字用於直接跳出while迴圈語句。
這裡值得注意的是,當while迴圈巢狀時,continue關鍵字和break關鍵字只會作用於它們所處的while迴圈之內,不會對外部while迴圈產生作用。
乙個簡單的例子如下:從1迴圈到10,當迴圈到7時,結束本次迴圈並繼續,當迴圈到8時,跳出迴圈
if..else關鍵字
if..else關鍵字實現了非此既彼的邏輯。和高階語言中的if..else具有完全一樣的使用方法,這裡就不再講述了,例子參看上圖。
還有要注意的是if經常會和exists關鍵字相結合來檢視資料表中指定的資料是否存在,比如:
我想查詢員工中沒有上級的人,如果有這個人,則輸出「*** is our boss」,如果沒有,則輸出"there is no infomation about our boss」
goto關鍵字
goto關鍵字因為能打亂程式的整個流程而在高階語言中臭名卓著。goto關鍵字的使用非常簡單,定義乙個跳轉標籤,只要goto 標籤名就可以。如果說一定要使用goto關鍵字的話,最佳實踐是只使用在錯誤處理上,比如:
return關鍵字
return是最簡單有效直接無條件告訴伺服器跳出某個批處理段(batch),使用者自定義函式和儲存過程的方式。在同乙個批處理中return關鍵字直接截止當前return所在的批處理(batch),批處理有關概念請參考前面go關鍵字那一節.
簡單的return概念如下例子:
在儲存過程中,return語句後面可以返回數字用於返回執行狀態或者錯誤**。
很多人會把return語句和raiserror函式搞混,區別在於raiserror函式會引發錯誤,並且程式依然會往下執行:
waitfor關鍵字
waitfor關鍵字允許指定語句在特定時間或是推遲特定時間執行。
推遲等待和在特定時間執行的語法分別是waitfor delay 『需要等待的執行時間',waitfor time 『需要執行程式的精確時間』
簡單的語法例子如下:
waitfor的功能可以實現更為複雜的業務邏輯,比如:
我想開始一項**活動,在當前時間10小時後開始,為8折,20小時後結束,變為9折:
總結本篇文章從t-sql查詢的角度講解了流程控制語句的8個關鍵字。利用好這些關鍵字是掌握複雜t-sql查詢的必要條件。
T SQL查詢高階 流程控制語句
和其他高階語言一樣,t sql中也有用於控制流程的語句。t sql中的流程控制語句進一步擴充套件了t sql的力量 使得大部分業務邏輯可以在資料庫層面進行。但很多人對t sql中的流程控制語句並沒有系統的了解,本篇文章會系統的對t sql語句中的流程控制語句進行系統講解。基本概念 在沒有流程控制語句...
T SQL流程控制語句
格式 if 布林表示式 begin endelse begin end示例 declare a int set a 3 if a 2 1 print a為奇數 else print a為偶數 格式 case 表示式 when 常量 then 結果表示式 else 結果表示式 end示例 declar...
Python流程控制語句流程控制語句
流程控制語句1 if語句 if 語句基本用法 if 表示式 語句塊其中,表示式可以是乙個單純的布林值或變數,也可以是比較表示式或邏輯表示式,如果表示式為真,則執行 語句塊 如果表示式的值為假,就跳 過 語句塊 繼續執行後面的語句。2 if else語句 if else 語句基本用法 if 表示式 語...