99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

基本概念

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

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

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

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

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

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

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

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

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

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

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

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

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

下面對(duì)上述關(guān)鍵字進(jìn)行挨個(gè)講解

BEGIN…END關(guān)鍵字

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

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

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

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

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

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

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

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

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

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

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

我想查詢員工中沒(méi)有上級(jí)的人,如果有這個(gè)人,則輸出“XXX is our boss”,如果沒(méi)有,則輸出"There is no infomation about our boss”

GOTO關(guān)鍵字

GOTO關(guān)鍵字因?yàn)槟艽騺y程序的整個(gè)流程而在高級(jí)語(yǔ)言中臭名卓著。GOTO關(guān)鍵字的使用非常簡(jiǎn)單,定義一個(gè)跳轉(zhuǎn)標(biāo)簽,只要GOTO 標(biāo)簽名就可以。如果說(shuō)一定要使用GOTO關(guān)鍵字的話,最佳實(shí)踐是只使用在錯(cuò)誤處理上,比如:

RETURN關(guān)鍵字

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

簡(jiǎn)單的Return概念如下例子:

在存儲(chǔ)過(guò)程中,Return語(yǔ)句后面可以返回?cái)?shù)字用于返回執(zhí)行狀態(tài)或者錯(cuò)誤代碼。

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

WAITFOR關(guān)鍵字

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

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

簡(jiǎn)單的語(yǔ)法例子如下:

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

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

總結(jié)

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

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

    關(guān)注

    1

    文章

    783

    瀏覽量

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

    關(guān)注

    7

    文章

    3926

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

    詳解TIA Portal SCL編程語(yǔ)言中的IF語(yǔ)句

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

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

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

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

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

    如何一眼定位SQL的代碼來(lái)源:一款SQL染色標(biāo)記的簡(jiǎn)易MyBatis插件

    侵入,接入簡(jiǎn)單,支持SELECT、INSERT、UPDATE、DELETE等語(yǔ)句,同時(shí)也支持無(wú)WHERE條件SQL的標(biāo)記增強(qiáng)。該SQL染色插件并不改變SQL指紋,染色信息內(nèi)置了stat
    的頭像 發(fā)表于 03-05 11:36 ?413次閱讀
    如何一眼定位<b class='flag-5'>SQL</b>的代碼來(lái)源:一款<b class='flag-5'>SQL</b>染色標(biāo)記的簡(jiǎn)易MyBatis插件

    淺談SQL優(yōu)化小技巧

    作者:京東零售 王軍 回顧:MySQL的執(zhí)行過(guò)程回顧 MySQL的執(zhí)行過(guò)程,幫助 介紹 如何進(jìn)行sql優(yōu)化。 (1)客戶端發(fā)送一條查詢語(yǔ)句到服務(wù)器; (2)服務(wù)器先查詢緩存,如果命中緩存,則立即返回
    的頭像 發(fā)表于 12-25 09:59 ?856次閱讀

    深入理解C語(yǔ)言:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

    在程序設(shè)計(jì)中,我們常常需要重復(fù)執(zhí)行某一段代碼。為了提高效率和簡(jiǎn)化代碼,循環(huán)語(yǔ)句應(yīng)運(yùn)而生。C語(yǔ)言作為一門經(jīng)典的編程語(yǔ)言,提供了多種循環(huán)控制結(jié)構(gòu),幫助程序員高效地實(shí)現(xiàn)重復(fù)操作。掌握循環(huán)語(yǔ)句的使用,不僅
    的頭像 發(fā)表于 12-07 01:11 ?628次閱讀
    深入理解C語(yǔ)言:循環(huán)<b class='flag-5'>語(yǔ)句</b>的應(yīng)用與優(yōu)化技巧

    SQL錯(cuò)誤代碼及解決方案

    SQL數(shù)據(jù)庫(kù)開發(fā)和管理中,常見的錯(cuò)誤代碼及其解決方案可以歸納如下: 一、語(yǔ)法錯(cuò)誤(Syntax Errors) 錯(cuò)誤代碼 :無(wú)特定代碼,但通常會(huì)在錯(cuò)誤消息中明確指出是語(yǔ)法錯(cuò)誤。 原因 :SQL語(yǔ)句中
    的頭像 發(fā)表于 11-19 10:21 ?6518次閱讀

    LTspice的編程語(yǔ)句應(yīng)該怎么寫?

    有關(guān)LTspice電路仿真軟件的使用,應(yīng)該怎么編寫一個(gè)變壓器的語(yǔ)句,尤其是多路輸出的,并且這個(gè)軟件是否支持多路浮動(dòng)電源輸出,就像反激式開關(guān)電源那樣副邊多路浮地? 有關(guān)LTspice的軟件使用有什么資料推薦,重點(diǎn)是關(guān)于編程語(yǔ)句編寫的,就像上面那樣兩個(gè)電感的耦合關(guān)系那樣實(shí)現(xiàn)變
    發(fā)表于 10-11 19:19

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之流程控制

    1、條件語(yǔ)句shell語(yǔ)句流程控制與C語(yǔ)言不一樣,流程控制中不能為空。shell中if語(yǔ)法如下,其中confition表示條件判斷式,command為程序段落。if else語(yǔ)法
    發(fā)表于 09-05 09:06

    華納云:MySQL初始化操作如何創(chuàng)建新的數(shù)據(jù)庫(kù)

    DATABASE語(yǔ)句來(lái)創(chuàng)建新的數(shù)據(jù)庫(kù)。語(yǔ)法如下: CREATE DATABASE database_name; 在上面的語(yǔ)句中,將database_name替換為你想要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)的名稱。 執(zhí)行上述SQL
    的頭像 發(fā)表于 09-04 14:30 ?546次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-shell腳本編寫之流程控制

    1、條件語(yǔ)句 shell語(yǔ)句流程控制與C語(yǔ)言不一樣,流程控制中不能為空。 shell中if語(yǔ)法如下,其中confition表示條件判斷式,command為程序段落。 if else
    發(fā)表于 09-04 10:12

    IP 地址在 SQL 注入攻擊中的作用及防范策略

    SQL 注入是通過(guò)將惡意的 SQL 代碼插入到輸入?yún)?shù)中,欺騙應(yīng)用程序執(zhí)行這些惡意代碼,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的非法操作。例如,在一個(gè)登錄表單中,如果輸入的用戶名被直接拼接到 SQL 查詢語(yǔ)句中
    的頭像 發(fā)表于 08-05 17:36 ?630次閱讀

    如何限制IPD語(yǔ)句中的最大字節(jié)數(shù)?

    當(dāng)數(shù)據(jù)可用時(shí),我正在使用帶有 IP 和 PORT 的擴(kuò)展 IPD 語(yǔ)句。 我的問(wèn)題是,如何限制 IPD 語(yǔ)句中的最大字節(jié)數(shù)? 當(dāng)我嘗試從服務(wù)器作為客戶端檢索數(shù)據(jù)時(shí),響應(yīng)包含大約 20k 的數(shù)據(jù),在
    發(fā)表于 07-17 06:06