91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

T-SQL語句中流程控制語句的系統(tǒng)講解

西西 ? 來源:博客園 ? 作者:宋沄劍 ? 2020-09-22 15:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

和其他高級語言一樣,T-SQL中也有用于控制流程的語句。T-SQL中的流程控制語句進一步擴展了T-SQL的力量……使得大部分業(yè)務(wù)邏輯可以在數(shù)據(jù)庫層面進行。但很多人對T-SQL中的流程控制語句并沒有系統(tǒng)的了解,本篇文章會系統(tǒng)的對T-SQL語句中的流程控制語句進行系統(tǒng)講解。

基本概念

在沒有流程控制語句的情況下,T-SQL語句是按照從上到下的順序逐個執(zhí)行:

使用流程控制語句可以讓開發(fā)人員可以基于某些邏輯進行選擇性的跳轉(zhuǎn),實現(xiàn)了類似高級語言的跳轉(zhuǎn)結(jié)構(gòu):

流程控制語句的使用范圍和GO關(guān)鍵字

流程控制語句只能在單個批處理段(Batch),用戶自定義函數(shù)和存儲過程中使用。不能跨多個批處理段或者用戶自定義函數(shù)和存儲過程。

因為這里重點講到T-SQL查詢語句,所以這里只講批處理段(Batch).

一個批處理段是由一個或者多個語句組成的一個批處理,之所以叫批處理是因為所有語句一次性被提交到一個SQL實例。在這個批處理范圍內(nèi),局部變量是互相可見的。

而想讓多個語句分多次提交到SQL實例,則需要使用GO關(guān)鍵字。GO關(guān)鍵字本身并不是一個SQL語句,GO關(guān)鍵字可以看作是一個批處理結(jié)束的標識符,當遇到GO關(guān)鍵字時,當前GO之前的語句會作為一個批處理直接傳到SQL實例執(zhí)行。所以不在同一個批處理內(nèi)局部變量不可見,也不可對跨批處理的語句使用流程控制語句.

在同一個批處理中局部變量互相可見:

在不同批處理中局部變量不可見:

在不同批處理中,流程控制語句不能跨批處理:

T-SQL中的8個流程控制語句關(guān)鍵字

在T-SQL中,與流程控制語句相關(guān)的關(guān)鍵字有8個:

BEGIN...END BREAK
GOTO CONTINUE
IF...ELSE WHILE
RETURN WAITFOR

下面對上述關(guān)鍵字進行挨個講解

BEGIN…END關(guān)鍵字

BEGIN…END關(guān)鍵字也是流程控制語句需要用到的最基本關(guān)鍵字,用于將多個語句劃分成邏輯上的一部分。其實可以直接理解成類C語言中的花括號(“{}"“)

WHILE/BREAK/CONTINUE關(guān)鍵字

在T-SQL的流程控制語句中,循環(huán)語句只有WHILE循環(huán),并沒有傳統(tǒng)高級語言的FOR和SWITCH循環(huán)。WHILE除了被用于流程控制語句的循環(huán)之外,還經(jīng)常被用于游標之中。

WHILE關(guān)鍵字和高級語言中的WHILE關(guān)鍵字幾乎完全一樣。WHILE循環(huán)中可以利用BREAK和CONTINUE關(guān)鍵字對循環(huán)進行控制。

CONTINUE關(guān)鍵字用于結(jié)束本次循環(huán),直接開始下一次循環(huán)。

BREAK關(guān)鍵字用于直接跳出WHILE循環(huán)語句。

這里值得注意的是,當WHILE循環(huán)嵌套時,CONTINUE關(guān)鍵字和BREAK關(guān)鍵字只會作用于它們所處的WHILE循環(huán)之內(nèi),不會對外部WHILE循環(huán)產(chǎn)生作用。

一個簡單的例子如下:從1循環(huán)到10,當循環(huán)到7時,結(jié)束本次循環(huán)并繼續(xù),當循環(huán)到8時,跳出循環(huán)

IF..ELSE關(guān)鍵字

IF..ELSE關(guān)鍵字實現(xiàn)了非此既彼的邏輯。和高級語言中的IF..ELSE具有完全一樣的使用方法,這里就不再講述了,例子參看上圖。

還有要注意的是IF經(jīng)常會和EXISTS關(guān)鍵字相結(jié)合來查看數(shù)據(jù)表中指定的數(shù)據(jù)是否存在,比如:

我想查詢員工中沒有上級的人,如果有這個人,則輸出“XXX is our boss”,如果沒有,則輸出"There is no infomation about our boss”

GOTO關(guān)鍵字

GOTO關(guān)鍵字因為能打亂程序的整個流程而在高級語言中臭名卓著。GOTO關(guān)鍵字的使用非常簡單,定義一個跳轉(zhuǎn)標簽,只要GOTO 標簽名就可以。如果說一定要使用GOTO關(guān)鍵字的話,最佳實踐是只使用在錯誤處理上,比如:

RETURN關(guān)鍵字

Return是最簡單有效直接無條件告訴服務(wù)器跳出某個批處理段(Batch),用戶自定義函數(shù)和存儲過程的方式。在同一個批處理中Return關(guān)鍵字直接截止當前Return所在的批處理(Batch),批處理有關(guān)概念請參考前面GO關(guān)鍵字那一節(jié).

簡單的Return概念如下例子:

在存儲過程中,Return語句后面可以返回數(shù)字用于返回執(zhí)行狀態(tài)或者錯誤代碼。

很多人會把Return語句和RAISERROR函數(shù)搞混,區(qū)別在于RAISERROR函數(shù)會引發(fā)錯誤,并且程序依然會往下執(zhí)行:

WAITFOR關(guān)鍵字

WAITFOR關(guān)鍵字允許指定語句在特定時間或是推遲特定時間執(zhí)行。

推遲等待和在特定時間執(zhí)行的語法分別是WAITFOR DELAY ‘需要等待的執(zhí)行時間',WAITFOR TIME ‘需要執(zhí)行程序的精確時間’

簡單的語法例子如下:

WAITFOR的功能可以實現(xiàn)更為復雜的業(yè)務(wù)邏輯,比如:

我想開始一項促銷活動,在當前時間10小時后開始,為8折,20小時后結(jié)束,變?yōu)?折:

總結(jié)

本篇文章從T-SQL查詢的角度講解了流程控制語句的8個關(guān)鍵字。利用好這些關(guān)鍵字是掌握復雜T-SQL查詢的必要條件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    46718
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    4020

    瀏覽量

    68369
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C語言中實現(xiàn)函數(shù)宏的三種方式

    在宏的第一個分號后便結(jié)束。即 a = b 和 b = tmp 均不受控制語句所作用。 因此,在工程中,一般使用三種方式來對函數(shù)宏進行封裝,分別為 {}、do{...}while(0
    發(fā)表于 12-29 07:34

    條件的執(zhí)行語句

    條件執(zhí)行語句大多在if語句中使用,也在使用關(guān)系運算符(<,==,>等) 或者布爾值表達式(,!等)計算復雜表達式時使用。對于包含函數(shù)調(diào) 用的代碼片段,由于函數(shù)返回值會被
    發(fā)表于 12-12 08:25

    C語言的分支結(jié)構(gòu)介紹

    1.簡單if語句 C語言中的分支結(jié)構(gòu)語句中的if條件語句。 簡單if語句的基本結(jié)構(gòu)如下: 代碼語言:javascript if(表達式) { 執(zhí)行代碼塊; } 其語義是:如
    發(fā)表于 11-25 07:48

    GD32F470使用__attribute__語句,keil編譯通過但是scons編譯不通過,為什么?

    問題語句: uint16_t ltdc_lcd_framebuf0[800][480] __attribute__((at(LCD_FRAME_BUF_ADDR))); 上述語句在keil編譯
    發(fā)表于 10-14 06:05

    不用編程不用聯(lián)網(wǎng),實現(xiàn)倍福(BECKHOFF)PLC對接SQL數(shù)據(jù)庫,上報和查詢數(shù)據(jù)的案例

    消息區(qū)域顯示的狀態(tài)消息;根據(jù)狀態(tài)消息調(diào)試。如下圖:智能網(wǎng)關(guān)根據(jù)以上配置自動生成SQL語句命令,結(jié)合數(shù)據(jù)庫相關(guān)參數(shù)對接到服務(wù)器,多個SQL語句用\'任務(wù)組\'區(qū)分,相同的任務(wù)組即為同一個
    發(fā)表于 10-10 11:14

    人工智能行業(yè)如何使用for循環(huán)語句進行循環(huán)

    : 支持range()函數(shù)生成數(shù)字序列 可結(jié)合else語句使用 Java中的for循環(huán): 傳統(tǒng)結(jié)構(gòu):for(初始化; 條件; 增量) 增強for循環(huán):for(類型 變量 : 集合) 主要用于數(shù)組和集合
    的頭像 發(fā)表于 09-10 12:55 ?577次閱讀

    Unicore標準NEMA語句GSA及說明

    本文介紹和芯星通的NEMA語句說明。
    的頭像 發(fā)表于 07-16 11:39 ?694次閱讀
    Unicore標準NEMA<b class='flag-5'>語句</b>GSA及說明

    是德示波器MSOX3054T程控制自動化測試

    實現(xiàn)自動化測試,助力測試流程的智能化升級。 ? 一、MSOX3054T的核心優(yōu)勢:遠程控制的基礎(chǔ) MSOX3054T示波器具備出色的信號采集與分析能力,其高頻帶寬、高采樣率及深存儲深度
    的頭像 發(fā)表于 07-08 17:09 ?654次閱讀
    是德示波器MSOX3054<b class='flag-5'>T</b>遠<b class='flag-5'>程控制</b>自動化測試

    基礎(chǔ)篇3:掌握Python中的條件語句與循環(huán)

    在Python編程語言中,條件語句和循環(huán)是構(gòu)成復雜邏輯和數(shù)據(jù)處理的基石。本篇基礎(chǔ)教程將幫助您深入了解Python中的條件語句和循環(huán)結(jié)構(gòu),讓您能夠更好地控制程序流程。 條件
    發(fā)表于 07-03 16:13

    大促數(shù)據(jù)庫壓力激增,如何一眼定位 SQL 執(zhí)行來源?

    語句成為了性能瓶頸。面對這樣的困境,本篇文章提出了對 SQL 進行 “染色” 的方法來幫助大家 一眼定位問題 SQL,而無需再在多處邏輯中輾轉(zhuǎn)騰挪 。本文的思路主要受之前郭忠強老師發(fā)布的 如何一眼定位
    的頭像 發(fā)表于 06-10 11:32 ?567次閱讀
    大促數(shù)據(jù)庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執(zhí)行來源?

    詳解TIA Portal SCL編程語言中的IF語句

    IF 語句是編程中最基本和最重要的控制結(jié)構(gòu)之一,它的主要作用是根據(jù)條件決定程序的執(zhí)行路徑,IF 語句是編程中實現(xiàn)邏輯判斷和決策的基礎(chǔ)。
    的頭像 發(fā)表于 05-24 15:01 ?1900次閱讀
    詳解TIA Portal SCL編程語言中的IF<b class='flag-5'>語句</b>

    深入理解C語言:C語言循環(huán)控制

    在C語言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環(huán),C語言提供了多種循環(huán)控制語句,如break、continue和goto,用于
    的頭像 發(fā)表于 04-29 18:49 ?2062次閱讀
    深入理解C語言:C語言循環(huán)<b class='flag-5'>控制</b>

    如何選擇適合您的過程控制器?

    在現(xiàn)代工業(yè)中,過程控制器是確保生產(chǎn)效率、質(zhì)量和安全性的關(guān)鍵設(shè)備。它們可以精準監(jiān)測溫度、濕度等變量,優(yōu)化制造流程。但您是否清楚如何選擇合適的過程控制器?
    的頭像 發(fā)表于 04-18 17:54 ?670次閱讀
    如何選擇適合您的過<b class='flag-5'>程控制</b>器?

    高速ssd存儲系統(tǒng)中數(shù)據(jù)緩存控制流程控制設(shè)計

    高速SSD系統(tǒng)中流程控制模塊設(shè)計。該模塊主要由寄存器、讀狀態(tài)機、寫狀態(tài)機和命令生成模塊組成,系統(tǒng)介紹各模塊功能。
    的頭像 發(fā)表于 04-14 10:43 ?846次閱讀
    高速ssd存儲<b class='flag-5'>系統(tǒng)</b>中數(shù)據(jù)緩存<b class='flag-5'>控制</b>器<b class='flag-5'>流程控制</b>設(shè)計

    智慧路燈如何實現(xiàn)遠程控制?

    引言 在智慧城市建設(shè)的進程中,叁仟智慧路燈作為重要的基礎(chǔ)設(shè)施,其遠程控制功能發(fā)揮著關(guān)鍵作用。遠程控制使得叁仟智慧路燈能夠擺脫地域限制,實現(xiàn)高效、精準的管理,極大地提升了城市照明系統(tǒng)的運行效率與智能化
    的頭像 發(fā)表于 03-18 12:27 ?1028次閱讀
    智慧路燈如何實現(xiàn)遠<b class='flag-5'>程控制</b>?