流程控制语句

概述

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

 

基本概念

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

     1

    

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

     2 

 

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

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

     由于这里重点讲到T-SQL查询语句,因此这里只讲批处理段(Batch).spa

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

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

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

     3-1

 

    在不一样批处理中局部变量不可见:get

    3-2

 

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

    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查询的必要条件。