色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

T-SQL語句中流程控制語句的系統講解

西西 ? 來源:博客園 ? 作者:宋沄劍 ? 2020-09-22 15:52 ? 次閱讀

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

基本概念

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

使用流程控制語句可以讓開發人員可以基于某些邏輯進行選擇性的跳轉,實現了類似高級語言的跳轉結構:

流程控制語句的使用范圍和GO關鍵字

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

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

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

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

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

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

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

T-SQL中的8個流程控制語句關鍵字

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

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

下面對上述關鍵字進行挨個講解

BEGIN…END關鍵字

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

WHILE/BREAK/CONTINUE關鍵字

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

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

CONTINUE關鍵字用于結束本次循環,直接開始下一次循環。

BREAK關鍵字用于直接跳出WHILE循環語句。

這里值得注意的是,當WHILE循環嵌套時,CONTINUE關鍵字和BREAK關鍵字只會作用于它們所處的WHILE循環之內,不會對外部WHILE循環產生作用。

一個簡單的例子如下:從1循環到10,當循環到7時,結束本次循環并繼續,當循環到8時,跳出循環

IF..ELSE關鍵字

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

還有要注意的是IF經常會和EXISTS關鍵字相結合來查看數據表中指定的數據是否存在,比如:

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

GOTO關鍵字

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

RETURN關鍵字

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

簡單的Return概念如下例子:

在存儲過程中,Return語句后面可以返回數字用于返回執行狀態或者錯誤代碼。

很多人會把Return語句和RAISERROR函數搞混,區別在于RAISERROR函數會引發錯誤,并且程序依然會往下執行:

WAITFOR關鍵字

WAITFOR關鍵字允許指定語句在特定時間或是推遲特定時間執行。

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

簡單的語法例子如下:

WAITFOR的功能可以實現更為復雜的業務邏輯,比如:

我想開始一項促銷活動,在當前時間10小時后開始,為8折,20小時后結束,變為9折:

總結

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

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

    關注

    1

    文章

    773

    瀏覽量

    44228
  • 數據庫
    +關注

    關注

    7

    文章

    3845

    瀏覽量

    64619
收藏 人收藏

    評論

    相關推薦

    Devart::dbForge SQL Complete讓生產力上一個臺階

    工作效率而定制的。 使用SQL Complete的主要原因 干凈、高質量的代碼 使用智能感知代碼補全,來開發純凈的、沒有錯誤的代碼。 提高生產率 使用豐富的內置代碼段集合,修改和/或創建自定義代碼段,使您的編碼速度翻倍。 早期錯誤檢測 使用高級T-SQL調試器功能發現并修
    的頭像 發表于 01-14 11:09 ?118次閱讀
    Devart::dbForge <b class='flag-5'>SQL</b> Complete讓生產力上一個臺階

    淺談SQL優化小技巧

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

    深入理解C語言:循環語句的應用與優化技巧

    在程序設計中,我們常常需要重復執行某一段代碼。為了提高效率和簡化代碼,循環語句應運而生。C語言作為一門經典的編程語言,提供了多種循環控制結構,幫助程序員高效地實現重復操作。掌握循環語句的使用,不僅
    的頭像 發表于 12-07 01:11 ?239次閱讀
    深入理解C語言:循環<b class='flag-5'>語句</b>的應用與優化技巧

    SQL錯誤代碼及解決方案

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

    LTspice的編程語句應該怎么寫?

    有關LTspice電路仿真軟件的使用,應該怎么編寫一個變壓器的語句,尤其是多路輸出的,并且這個軟件是否支持多路浮動電源輸出,就像反激式開關電源那樣副邊多路浮地? 有關LTspice的軟件使用有什么資料推薦,重點是關于編程語句編寫的,就像上面那樣兩個電感的耦合關系那樣實現變
    發表于 10-11 19:19

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

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

    華納云:MySQL初始化操作如何創建新的數據庫

    DATABASE語句來創建新的數據庫。語法如下: CREATE DATABASE database_name; 在上面的語句中,將database_name替換為你想要創建的數據庫的名稱。 執行上述SQL
    的頭像 發表于 09-04 14:30 ?305次閱讀

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

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

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

    SQL 注入是通過將惡意的 SQL 代碼插入到輸入參數中,欺騙應用程序執行這些惡意代碼,從而實現對數據庫的非法操作。例如,在一個登錄表單中,如果輸入的用戶名被直接拼接到 SQL 查詢語句中
    的頭像 發表于 08-05 17:36 ?357次閱讀

    如何限制IPD語句中的最大字節數?

    當數據可用時,我正在使用帶有 IP 和 PORT 的擴展 IPD 語句。 我的問題是,如何限制 IPD 語句中的最大字節數? 當我嘗試從服務器作為客戶端檢索數據時,響應包含大約 20k 的數據,在
    發表于 07-17 06:06

    KW-2402鉑RTD傳感器的SPICE模型中的其中一句LTspice仿真語句是什么意思呢?

    我想問下,.param UNIT=(IF(T1&gt;0,1,0))這句仿真語句,怎么理解呢? 最近在做測溫電路,正好讀到了ADI智庫新出來的一個資料(非常非常好)??吹竭@個仿真語句
    發表于 06-04 13:30

    求助,為什么STM32CUBEIDE中的GCC編譯器不提示if語句中的錯誤信息?

    STM32cubeIDE中的GCC編譯器,在如下語句,因為輸錯了,但GCC沒有提示錯誤信息,只提示了一個警告信息,如何設置能提示? uint8_ti=0; uint8_tk=0
    發表于 04-07 08:47

    鴻蒙TypeScript入門學習第6天:【條件語句

    條件語句用于基于不同的條件來執行不同的動作。 TypeScript 條件語句是通過一條或多條語句的執行結果(True 或 False)來決定執行的代碼塊。
    的頭像 發表于 04-01 13:51 ?791次閱讀
    鴻蒙TypeScript入門學習第6天:【條件<b class='flag-5'>語句</b>】

    使用Keil編譯的時候else里的語句沒有編譯是怎么回事?

    最近遇到了一個編譯問題,我在stm32f4xx_it.c文件中的CAN2_RX0_IRQHandler函數里編寫了一個if——else if ——else語句,但調試的時候發現elseif
    發表于 03-11 06:42

    assign語句和always語句的用法

    Assign語句和Always語句是在硬件描述語言(HDL)中常用的兩種語句,用于對數字電路建模和設計。Assign語句用于連續賦值,而Always
    的頭像 發表于 02-22 16:24 ?2755次閱讀
    主站蜘蛛池模板: 好紧好湿太硬了我太爽了小说 | 韩国伦理片2018在线播放免费观看 | 野花视频在线观看免费最新动漫 | 久久婷婷五月综合色丁香 | 精品久久久久久久久免费影院 | 37大但人文艺术A级都市天气 | 免费三级黄色 | 美国69xxxx59| 日日噜噜夜夜躁躁狠狠 | 永久精品免费影院在线观看网站 | 青青青手机视频 | 99久久就热视频精品草 | 色综合久久网女同蕾丝边 | 国内一级一级毛片a免费 | 免费三级网址 | 最新在线黄色网址 | 日本美国群交P片内射捆绑 日本毛片久久国产精品 | 亚洲精品嫩草研究院久久 | 骚浪插深些好烫喷了 | 97人人超碰国产精品最新蜜芽 | 国产精品18久久久久久欧美网址 | 中文字幕伊人香蕉在线 | 中文字幕人成乱码中国 | 亚洲三级视频在线观看 | 一受n攻高h全肉np | 99热久久爱五月天婷婷 | 领导边摸边吃奶边做爽在线观看 | 日韩亚洲欧美中文高清 | 国产精品久久久久久久久齐齐 | 精品一区二区三区免费毛片 | 日日噜噜夜夜躁躁狠狠 | 2017最新伦理伦理片67 | 法国剧丝袜情版h级在线电影 | 在线观看精品视频看看播放 | 亚洲成人精品久久 | 70岁妇女牲交色牲片 | 国产午夜电影院 | 亚洲人女同志video | 欧美激情一区二区三区视频 | 亚洲妈妈精品一区二区三区 | 国产精品久久大陆 |