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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

基本概念

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

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

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

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

因?yàn)檫@里重點(diǎn)講到T-SQL查詢語句,所以這里只講批處理段(Batch).

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

而想讓多個語句分多次提交到SQL實(shí)例,則需要使用GO關(guān)鍵字。GO關(guān)鍵字本身并不是一個SQL語句,GO關(guān)鍵字可以看作是一個批處理結(jié)束的標(biāo)識符,當(dāng)遇到GO關(guān)鍵字時,當(dāng)前GO之前的語句會作為一個批處理直接傳到SQL實(shí)例執(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)鍵字進(jìn)行挨個講解

BEGIN…END關(guān)鍵字

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

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

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

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

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

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

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

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

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

IF..ELSE關(guān)鍵字實(shí)現(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)鍵字因?yàn)槟艽騺y程序的整個流程而在高級語言中臭名卓著。GOTO關(guān)鍵字的使用非常簡單,定義一個跳轉(zhuǎn)標(biāo)簽,只要GOTO 標(biāo)簽名就可以。如果說一定要使用GOTO關(guān)鍵字的話,最佳實(shí)踐是只使用在錯誤處理上,比如:

RETURN關(guān)鍵字

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

簡單的Return概念如下例子:

在存儲過程中,Return語句后面可以返回?cái)?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的功能可以實(shí)現(xiàn)更為復(fù)雜的業(yè)務(wù)邏輯,比如:

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

總結(jié)

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

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

    關(guān)注

    1

    文章

    801

    瀏覽量

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

    關(guān)注

    7

    文章

    4043

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    條件的執(zhí)行語句

    條件執(zhí)行語句大多在if語句中使用,也在使用關(guān)系運(yùn)算符(<,==,>等) 或者布爾值表達(dá)式(,!等)計(jì)算復(fù)雜表達(dá)式時使用。對于包含函數(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(表達(dá)式) { 執(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),實(shí)現(xiàn)倍福(BECKHOFF)PLC對接SQL數(shù)據(jù)庫,上報(bào)和查詢數(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)語句進(jìn)行循環(huán)

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

    助力工業(yè)物聯(lián)網(wǎng)升級,智能遠(yuǎn)程控制系統(tǒng)功不可沒

    在工業(yè)4.0的浪潮中,工業(yè)物聯(lián)網(wǎng)(IIoT)正從概念走向規(guī)模化落地,而智能遠(yuǎn)程控制系統(tǒng)作為其核心組件,如同“神經(jīng)傳導(dǎo)中樞”,將分散的設(shè)備、數(shù)據(jù)與決策端緊密連接??缭綍r空的精準(zhǔn)操作,都依賴于智能遠(yuǎn)程控制系統(tǒng)
    的頭像 發(fā)表于 08-06 16:23 ?1073次閱讀

    Unicore標(biāo)準(zhǔn)NEMA語句GSA及說明

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

    是德示波器MSOX3054T遠(yuǎn)程控制自動化測試

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

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

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

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

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

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

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

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

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

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

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

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

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