和其他高级语言一样,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查询的必要条件。
ModelSim和QuestaSim功能简介及应用
怎样去为智慧城市建设赋能
讯飞会议耳机iFLYBUDS Pro为什么受欢迎
中国移动发布“联创+”行动计划
iPad Pro 上的 Smart Connector 可以拿来做什么?
T-SQL语句中流程控制语句的系统讲解
TIA Portal版本和CPU中程序版本在上传时的兼容性
在PCB布局中如何高效的使用光耦合器?
大数据给安防带来深刻变革 安防的范围正逐渐扩大
失联卫星被找回,“草根”对科学界做出大贡献
300w太阳能电池板的发电量_太阳能电池发电量计算
中国电信OTA卡业务
智慧消防市场现在正在怎样的状态
三菱Q系列PLC转以太网通过CHNet-Q实现以太网通信及ModbusTCP配置方法
2020年千兆用户数已突破588万,未来将进入全新的F5G时代
松下宣布将在德岛县现有的松下工厂内安装一条新的方形电池生产线
MAX72408双通道串行通用输入/输出(SGPIO)背板控
制冷设备及汽车零部件企业海立股份发布2022第一季度报告
印度智能手机的出货量仅次于中国已成为全球第二大智能手机市场
魅族pro6,vivoxplay6,三星c9pro三款值得拥有的音乐手机!