T-SQL查询进阶--流程控制语句

概述

     和其他高级语言一样,T-SQL中也有用于控制流程的语句。T-SQL中的流程控制语句进一步扩展了T-SQL的力量……使得大部分业务逻辑可以在数据库层面进行。但很多人对T-SQL中的流程控制语句并没有系统的了解,本篇文章会系统的对T-SQL语句中的流程控制语句进行系统讲解。

 

基本概念

     在没有流程控制语句的情况下,T-SQL语句是按照从上到下的顺序逐个执行:

     1

    

     使用流程控制语句可以让开发人员可以基于某些逻辑进行选择性的跳转,实现了类似高级语言的跳转结构:

     2 

 

流程控制语句的使用范围和GO关键字

 

     流程控制语句只能在单个批处理段(Batch),用户自定义函数和存储过程中使用。不能跨多个批处理段或者用户自定义函数和存储过程。

     因为这里重点讲到T-SQL查询语句,所以这里只讲批处理段(Batch).

     一个批处理段是由一个或者多个语句组成的一个批处理,之所以叫批处理是因为所有语句一次性被提交到一个SQL实例。在这个批处理范围内,局部变量是互相可见的。

     而想让多个语句分多次提交到SQL实例,则需要使用GO关键字。GO关键字本身并不是一个SQL语句,GO关键字可以看作是一个批处理结束的标识符,当遇到GO关键字时,当前GO之前的语句会作为一个批处理直接传到SQL实例执行。所以不在同一个批处理内局部变量不可见,也不可对跨批处理的语句使用流程控制语句.

     在同一个批处理中局部变量互相可见:

     3-1

 

    在不同批处理中局部变量不可见:

    3-2

 

    在不同批处理中,流程控制语句不能跨批处理:

    3-3

    

 

 

T-SQL中的8个流程控制语句关键字

    在T-SQL中,与流程控制语句相关的关键字有8个:

 

BEGIN...END

BREAK

GOTO

CONTINUE

IF...ELSE

WHILE

RETURN

WAITFOR

   下面对上述关键字进行挨个讲解

 

 

BEGIN…END关键字

    BEGIN…END关键字也是流程控制语句需要用到的最基本关键字,用于将多个语句划分成逻辑上的一部分。其实可以直接理解成类C语言中的花括号(“{}"“)

    4

 

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时,跳出循环

    5

IF..ELSE关键字

    IF..ELSE关键字实现了非此既彼的逻辑。和高级语言中的IF..ELSE具有完全一样的使用方法,这里就不再讲述了,例子参看上图。

    还有要注意的是IF经常会和EXISTS关键字相结合来查看数据表中指定的数据是否存在,比如:

    我想查询员工中没有上级的人,如果有这个人,则输出“XXX is our boss”,如果没有,则输出"There is no infomation about our boss”

    6

 

GOTO关键字

    GOTO关键字因为能打乱程序的整个流程而在高级语言中臭名卓著。GOTO关键字的使用非常简单,定义一个跳转标签,只要GOTO 标签名就可以。如果说一定要使用GOTO关键字的话,最佳实践是只使用在错误处理上,比如:

    7

 

RETURN关键字

    Return是最简单有效直接无条件告诉服务器跳出某个批处理段(Batch),用户自定义函数和存储过程的方式。在同一个批处理中Return关键字直接截止当前Return所在的批处理(Batch),批处理有关概念请参考前面GO关键字那一节.

    简单的Return概念如下例子:

    10

     在存储过程中,Return语句后面可以返回数字用于返回执行状态或者错误代码。

     很多人会把Return语句和RAISERROR函数搞混,区别在于RAISERROR函数会引发错误,并且程序依然会往下执行:

     11

WAITFOR关键字

 

    WAITFOR关键字允许指定语句在特定时间或是推迟特定时间执行。

    推迟等待和在特定时间执行的语法分别是WAITFOR DELAY ‘需要等待的执行时间',WAITFOR TIME ‘需要执行程序的精确时间’

    简单的语法例子如下:

    8

   WAITFOR的功能可以实现更为复杂的业务逻辑,比如:

   我想开始一项促销活动,在当前时间10小时后开始,为8折,20小时后结束,变为9折:

   9

 

总结

   本篇文章从T-SQL查询的角度讲解了流程控制语句的8个关键字。利用好这些关键字是掌握复杂T-SQL查询的必要条件。

 

转载于:https://www.cnblogs.com/WikStone/archive/2011/12/03/2274826.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

潘建伟团队首次实现18个光量子比特纠缠,刷新世界记录

来源:澎湃网摘要:中国科学技术大学潘建伟教授及其同事陆朝阳、刘乃乐、汪喜林等通过调控六个光子的偏振、路径和轨道角动量三个自由度,在国际上首次实现18个光量子比特的纠缠,刷新了所有物理体系中最大纠缠态制备的世界纪录。中国…

Frida Hook 常用函数、java 层 hook、so 层 hook、RPC、群控

From:Frida hook 常用函数分享:https://www.52pojie.cn/thread-1196917-1-1.html From:Frida Hook Android 常用方法:https://blog.csdn.net/zhy025907/article/details/89512096 Frida 使用:https://zhuanlan.zhihu.c…

资本|五大科技巨头并购投资布局分析

来源:199IT互联网数据中心就买进而言,科技巨头可能是一个理想的收购方。Alphabet、亚马逊、苹果、Facebook和微软拥有巨大的市场价值(3.9万亿美元)。综合来看,五大科技巨头在整个并购市场占有相对较小的份额。下图显示…

安装 Chrome 插件:Stylish、xStyle​、Tampermonkey、SwitchyOmega

安装 Chrome 插件 3 种方法 方法 1:直接通过 chrome 插件商店安装,google 插件商店因为 "都懂的" 原因无法访问,如果会 "高科技" 上网可以忽略。直接通过插件商店安装方法 2:如果不会 "高科技" 上网…

数据库管理工具 Navicat 和 DBeaver

Navicat “Navicat” 是一套可创建多个连接的数据库管理工具,用以方便管理 MySQL、Oracle、PostgreSQL、SQLite、SQL Server、MariaDB 和/或 MongoDB 等不同类型的数据库,并支持管理某些云数据库,例如阿里云、‎腾讯云。Navicat 和 Navicat …

百度Apollo发布中国首个自动驾驶安全报告,L3级别产品2020年量产上市

来源:雷锋网去年 10 月,全球自动驾驶研发先行者 Waymo 发布了长达 43 页的安全报告,里面详细说明了如何装备和训练自动驾驶车辆,从而避免驾驶过程中一些意外情况的发生。今年 1 月,美国车企巨头通用也发布了“2018 自动…

Chrome Devtools 高级调试指南

From ( Chrome Devtools 高级调试指南 ):https://juejin.cn/post/6844903961472974855 chrome devtools 设置黑色主题:https://blog.csdn.net/sinat_15347975/article/details/81151342 Chrome DevTools 实用技巧大全(收藏)&…

包揽全球50%以上份额,中美发力超级计算

来源:第一财经摘要:中国已经成为全球拥有最多超级计算机的国家。根据上周发布的一份最新榜单,全球排名前500强的超级计算机中,有206台是中国研制的;而美国仅拥有124台。多年来,美国长期主导着超级计算机市场…

Fiddler 抓包工具总结

From:https://www.cnblogs.com/yyhh/p/5140852.html 官方文档:https://www.telerik.com/support/fiddler Fiddler 调式使用 (一) --- 深入研究:https://www.cnblogs.com/tugenhua0707/p/4637771.html Fiddler 实战 --- 深入研究(二)&#…

云计算行业报告:2018, 风起云涌

来源:物联网智库摘要:依托弹性扩展、费用低、速度快的优势,云计算颠覆了传统IT架构,未来将成为主流的IT架构。多优势助力云计算颠覆传统IT服务架构经过十几年的发展,云计算已经形成了较为完善的生态系统,构…

charles 简单使用

From:https://www.cnblogs.com/wenjun145/p/12995535.html 1、下载安装 1. 下载地址:https://www.charlesproxy.com/latest-release/download.do 2. 下载之后安装。按照默认next 即可,然后选择路径。 3. charles 。PJ:https://ww…

Facebook、谷歌、微软利用“黑暗模式”诱骗用户交出数据

来源:网络大数据摘要:挪威消费者委员会指出,Facebook、谷歌以及微软等科技巨头正在使用“黑暗模式”,或用户界面来诱骗用户交出自己的数据,以此推动用户被动选择不利于自身隐私保护的选项。据称,谷歌和Face…

Python 大规模异步新闻爬虫、google翻译、百度翻译、有道翻译、百度指数

参考:https://www.yuanrenxue.com/crawler/news-crawler-urlpool.html url_pool.py # -*- coding: utf-8 -*- # Author : 佛祖保佑, 永无 bug # Date : # File : url_pool.py # Software: PyCharm # description : XXXimport time import redis import pick…

字字珠玑!任正非最新内部演讲:高科技急不来,股市为了圈钱夸大太多

来源:综合自中国企业家杂志、心声社区摘要:“科学研究,没有浪费就不可能有成功。华为公司走到今天,我们在产品研究的成功率应该还没有超过50%,相当于我们每年有几十亿美金被浪费了,但是培养了一大批高级将领…

table数据表 边框特效

本文针对用table显示数据&#xff0c;主要是table的线条颜色处理。 1.下面的这个方法&#xff0c;比较试用于单一的table不适用于table 套着table。这样的话在某些浏览器上浏览是有差别的。table套table 有可能会出现线条加粗的情况。 <style type"text/css"> …

jQuery 教程

菜鸟教程 --- jQuery 教程&#xff1a;https://www.runoob.com/jquery/jquery-tutorial.html jQuery 是一个 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 简介 什么是 jQuery &#xff1f; jQuery 是一个 JavaScript 函数库。 jQuery 是一个轻量级的"…

世界首条柔性人造触觉神经诞生,有望应用于义肢感触等领域

来源&#xff1a;中国青年报摘要&#xff1a;如果能让机器人拥有触觉&#xff0c;可以感知温度、压力&#xff0c;甚至具有神经活动&#xff0c;那么它们将“解锁”更多新技能。如果能让机器人拥有触觉&#xff0c;可以感知温度、压力&#xff0c;甚至具有神经活动&#xff0c;…

基于 frida 实现的逆向工具包 hooker

hooker逆向工作台&#xff1a;https://github.com/CreditTone/hooker hooker 是一个基于 frida 实现的 逆向工具包。为逆向开发人员提供统一化的脚本包管理方式、通杀脚本、自动化生成hook脚本、内存漫游探测activity和service、firda版JustTrustMe。 hooker 和 frida、object…

魏少军谈AI芯片热潮和架构创新 透露清华Thinker芯片将独立融资

来源&#xff1a;网易智能摘要&#xff1a;在近日于深圳举办的2018 CCF-GAIR 全球人工智能与机器人峰会上&#xff0c;清华大学微电子所所长魏少军发表了演讲&#xff0c;阐述了AI时代芯片架构的问题。会后&#xff0c;魏少军接受了网易智能的专访&#xff0c;谈到了中国芯片行…

JS 逆向 --- 过无限debugge、hook、js混淆还原、控制流混淆

访问这个网站的时候&#xff0c;cookie 里面会有一个 sign 值&#xff0c;这个sign 值是通过 JavaScript 代码生成的&#xff0c;JS 代码是用 ob 混淆的&#xff0c; 当打开 "开发者工具" 时&#xff0c;会直接进入 "无限 debugger" 模式&#xff0c;过无限…