<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SQL中的流程控制

          共 3974字,需瀏覽 8分鐘

           ·

          2021-08-19 23:31

          點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨

          SQL專欄

          SQL基礎(chǔ)知識(shí)第二版
          SQL高級(jí)知識(shí)第二版

          流程控制的定義

          一般是指用來控制程序執(zhí)行和流程分至點(diǎn)額命令,一般指的是邏輯計(jì)算部分的控制。


          流程控制種類

          常見的流程控制有以下8種

          BEGIN ... ENDWAITFORGOTO
          WHILEIF ... ELSEBREAK
          RETURNCONTINUE

          下面給大家具體介紹每種流程控制的用法。


          BEGIN...END

          BEGIN ... END語句用于將多個(gè)T-SQL語句合為一個(gè)邏輯塊。當(dāng)流程控制語句必須執(zhí)行一個(gè)包含兩條或兩條以上的T-SQL語句的語句塊時(shí),使用BEGIN ... END語句。


          語法

          BEGIN  

          sql_statement... 

          END


          示例

          我們?cè)跀?shù)據(jù)庫中打印出我們公眾號(hào)的名稱"SQL數(shù)據(jù)庫開發(fā)"

          DECLARE @A VARCHAR(20)
          SET @A='SQL數(shù)據(jù)庫開發(fā)'
          BEGIN
          SELECT @A
          END

          結(jié)果如下:

          這里的SELECT @A就是一條被執(zhí)行的命令語句。


          IF [...ELSE]

          IF [...ELSE]表示可以只使用IF,也可以IF和ELSE一起使用,表示條件判斷。當(dāng)滿足某個(gè)條件使,就執(zhí)行IF 下面的語句,否則執(zhí)行ELSE下面的語句


          IF語法

          IF <條件表達(dá)式>

           {命令行 | 程序塊}


          IF示例

          如果某字符串的長(zhǎng)度大于5,就打印該字符串

          DECLARE @A VARCHAR(20)
          SET @A='SQL數(shù)據(jù)庫開發(fā)'
          IF LEN(@A)>5
          SELECT @A

          結(jié)果:

          這里結(jié)果與上面的BEGIN...END一樣,但是如果我們將條件改成大于8,結(jié)果可能就不是這樣的了,小伙伴們可以試一下。


          IF...ELSE語法

          IF <條件表達(dá)式> 

          {命令行 | 程序塊} 

          ELSE {命令行 | 程序塊}


          IF...ELSE示例

          如果字符串的長(zhǎng)度大于10,就打印該字符串,否則打印"字符串長(zhǎng)度太短"

          DECLARE @A VARCHAR(20)
          SET @A='SQL數(shù)據(jù)庫開發(fā)'
          IF LEN(@A)>10
          SELECT @A
          ELSE
          SELECT '字符串長(zhǎng)度太短'


          結(jié)果:

          很明顯字符串"SQL數(shù)據(jù)庫開發(fā)"長(zhǎng)度不大于10,所以返回ELSE里的結(jié)果了。


          WHILE

          WHILE是循環(huán)控制,當(dāng)滿足WHILE后面的條件后,就可以循環(huán)執(zhí)行WHILE下面的語句。通常與CONTINUE和BREAK一起使用,Break命令讓程序完全跳出循環(huán)語句,結(jié)束WHILE命令,CONTINUE是讓命令繼續(xù)返回執(zhí)行


          語法

          WHILE  <條件表達(dá)式>

           {命令行 | 程序塊} 

          CONTINUE 

          {命令行 | 程序塊} 

          BREAK 

          {命令行 | 程序塊}


          示例

          有1到10這樣一組數(shù)字,從1按順序開始,遇到偶數(shù)就跳過,遇到奇數(shù)就打印出來,當(dāng)遇到9就結(jié)束打印。

          DECLARE @i int;
          SET @i = 0;
          WHILE(@i < 10)
          BEGIN
              SET @i = @i + 1;
              IF(@i % 2 = 0)
              BEGIN
                  PRINT ('跳過偶數(shù)數(shù)' + CAST(@i AS varchar));
                  CONTINUE;
              END
              ELSE IF (@i = 9)
              BEGIN
                  PRINT ('到' + CAST(@i AS varchar) + '就結(jié)束打印');
                  BREAK;
              END
              PRINT @i;
          END

          結(jié)果如下:

          我們只正常打印出來了1-3-5-7其他的不是跳過就是到9就結(jié)束了。


          RETURN

          RETURN語句用于使程序從一個(gè)查詢、存儲(chǔ)過程或批量處理中無條件返回,其后面的語句不再執(zhí)行。如果在存儲(chǔ)過程中使用return語句,那么此語句可以指定返回給調(diào)用應(yīng)用程序、批處理或過程的整數(shù);如果沒有為RETURN指定整數(shù)值,那么該存儲(chǔ)過程將返回0。


          語法

          RETURN [整數(shù)表達(dá)式]


          示例

          BEGIN
              PRINT(1);
              PRINT(2);
              RETURN ;
              PRINT(3); --在RETURN之后的代碼不會(huì)被執(zhí)行,因?yàn)闀?huì)跳過當(dāng)前批處理
              PRINT(4);
          END
          GO
          BEGIN
              PRINT(5);
          END

          結(jié)果如下:

          RETURN后面的3-4都沒打印,說明在當(dāng)前批處理的RETURN后都沒執(zhí)行,而新起的BEGIN...END不受上面的RETURN影響,所以打印了5


          GOTO

          GOTO命令用來改變程序執(zhí)行的流程,使程序跳轉(zhuǎn)到標(biāo)識(shí)符指定的程序行再繼續(xù)往下執(zhí)行。

          GOTO命令雖然增加了程序設(shè)計(jì)的靈活性,但破壞了程序的結(jié)構(gòu)化,使程序結(jié)構(gòu)變得復(fù)雜而且難以測(cè)試。


          注意:

          • 語句標(biāo)識(shí)符可以是數(shù)字或者字母的組合,但必須以":"結(jié)束。而在GOTO語句后的標(biāo)識(shí)符不必帶":"。

          • GOTO語句和跳轉(zhuǎn)標(biāo)簽可以在存儲(chǔ)過程、批處理或語句塊中的任何地方使用,但不能超出批處理的范圍。


          語法

          GOTO  標(biāo)識(shí)符


          示例

          DECLARE @i INT;
          SET @i = 1;
          PRINT @i;
          SET @i = 2;
          PRINT @i;
          GOTO ME;
          SET @i = 3; --這行被跳過了
          PRINT @i;

          ME:PRINT('跳到我了?');
          PRINT @i

          結(jié)果如下:

          從上面可以看出,當(dāng)跳到ME的時(shí)候,GOTO之前的數(shù)有打印,之后的數(shù)就跳過了


          WAITFOR

          用于掛起語句的執(zhí)行,直到指定的時(shí)間點(diǎn)或者指定的時(shí)間間隔。


          注意:

          WAITFOR常用語某個(gè)特定的時(shí)間點(diǎn)或時(shí)間間隔自動(dòng)執(zhí)行某些任務(wù)。在WAITFOR語句中不能包含打開游標(biāo),定義視圖這樣的操作。在包含事務(wù)的語句中不要使用WAITFOR語句,因?yàn)閃AITFOR語句在時(shí)間點(diǎn)或時(shí)間間隔執(zhí)行期間將一直擁有對(duì)象的鎖,當(dāng)事務(wù)中包含WAITFOR語句,事務(wù)的其他語句又需要訪問被鎖住的數(shù)據(jù)對(duì)象事就容易發(fā)生死鎖現(xiàn)象。


          指定時(shí)間點(diǎn)的語法

          WAITFOR   TIME <具體時(shí)間>


          示例

          在'08:10:00'執(zhí)行打印字符串"SQL數(shù)據(jù)庫開發(fā)"

          WAITFOR TIME '08:10:00'
          PRINT 'SQL數(shù)據(jù)庫開發(fā)'


          如果你執(zhí)行這句話,那如果在今天這個(gè)點(diǎn)之前,那么等到這個(gè)時(shí)候它就會(huì)打印字符串,如果在今天這個(gè)點(diǎn)之后,那你需要等到第二天的這個(gè)時(shí)間點(diǎn)才會(huì)打印。在未執(zhí)行之前查詢窗口是一直"正在執(zhí)行查詢..."狀態(tài)


          指定等待時(shí)間間隔的語法

          WAITFOR DELAY  'INTERVAR'

          INTERVAR為時(shí)間間隔,指定執(zhí)行WAITFOR 語句之前需要等待的時(shí)間,最多為24小時(shí)。


          示例

          WAITFOR DELAY '00:00:03'
          PRINT 'SQL數(shù)據(jù)庫開發(fā)'

          在等到3秒鐘后,會(huì)打印出字符串


          總結(jié)

          流程控制是SQL開發(fā)中經(jīng)常需要使用到的,特別是條件判斷IF...ELSE,循環(huán)執(zhí)行WHILE是經(jīng)常使用的,對(duì)于想在SQL開發(fā)中有所提高的同學(xué),務(wù)必要掌握這幾個(gè)流程控制的用法。


          最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識(shí)第二版》《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來實(shí)操。

          有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行
          數(shù)據(jù)前線


          后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。


          推薦閱讀
          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男人露大鸡巴无遮挡免费视频 | 国产黄色片在线观看 | 国产精品久久久久三级无码 | www三区 | 成人精品一区二区婷婷 |