日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
T-SQL查詢(xún)進(jìn)階--流程控制語(yǔ)句

概述

和其他高級(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ǔ)句可以讓開(kāi)發(fā)人員可以基于某些邏輯進(jìn)行選擇性的跳轉(zhuǎn),實(shí)現(xiàn)了類(lèi)似高級(jí)語(yǔ)言的跳轉(zhuǎn)結(jié)構(gòu):

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

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

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

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

而想讓多個(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)局部變量不可見(jiàn),也不可對(duì)跨批處理的語(yǔ)句使用流程控制語(yǔ)句.

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

在不同批處理中局部變量不可見(jiàn):

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

#p#

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í)可以直接理解成類(lèi)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),直接開(kāi)始下一次循環(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ù)是否存在,比如:

我想查詢(xún)員工中沒(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)鍵字的話(huà),***實(shí)踐是只使用在錯(cuò)誤處理上,比如:

#p#

RETURN關(guān)鍵字

Return是最簡(jiǎn)單有效直接無(wú)條件告訴服務(wù)器跳出某個(gè)批處理段(Batch),用戶(hù)自定義函數(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ù)邏輯,比如:

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

總結(jié)

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


網(wǎng)站標(biāo)題:T-SQL查詢(xún)進(jìn)階--流程控制語(yǔ)句
當(dāng)前地址:http://www.dlmjj.cn/article/cooicje.html