购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.5 流程控制语句

通过T-SQL中的流程控制语句,可以根据业务的需要改变代码的执行顺序,T-SQL中可以用来编写流程控制模块的语句有BEGIN…END语句、IF…ELSE语句、CASE语句、WHILE语句、GOTO语句、BREAKE语句、WAITFOR语句和RETURN语句。

4.5.1 BEGIN…END语句

语句块是多条T-SQL语句组成的代码段,从而可以执行一组T-SQL语句。BEGIN和END是控制流语言的关键字。BEGIN…END语句块通常包含在其他控制流程中,用来完成不同流程中有差异的代码功能。例如,对于IF…ELSE语句或执行重复语句的WHILE语句,如果不是有语句块,这些语句中只能包含一条语句,但是实际的情况可能需要复杂的处理过程。BEGIN...END语句块允许嵌套。

【例4.22】定义局部变量@count,如果@count值小于10,执行WHILE循环操作中的语句块,输入语句如下。

代码执行结果如图4-17所示。

图4-17 BEGIN…END语句块

该段代码执行了一个循环过程,当局部变量@count值小于10的时候,执行WHILE循环内的PRINT语句打印输出当前@count变量的值,对@count执行加1操作之后回到WHILE语句的开始重复执行BEGIN...END语句块中的内容。直到@count的值大于等于10,此时WHILE后面的表达式不成立,将不再执行循环。最后打印输出当前的@count值,结果为10。

4.5.2 IF…ELSE语句

IF…ELSE语句用于在执行一组代码之前进行条件判断,根据判断的结果执行不同的代码。IF...ELSE语句对布尔表达式进行判断,如果布尔表达式返回TRUE,就执行IF关键字后面的语句块;如果布尔表达式返回FALSE,就执行ELSE关键字后面的语句块。语法格式如下。

     IF Boolean_expression
     { sql_statement | statement_block }
     [ ELSE
     { sql_statement | statement_block } ]

Boolean_expression是一个表达式,表达式计算的结果为逻辑真值(TRUE)或假值(FALSE)。当条件成立时,执行某段程序;条件不成立时,执行另一段程序。IF…ELSE语句可以嵌套使用。

【例4.23】IF…ELSE流程控制语句的使用,输入语句如下。

代码执行结果如图4-18所示。

由结果可以看到,变量@age值为40,大于30,因此表达式@age<30不成立,返回结果为逻辑假值(FALSE),所以执行第6行的PRINT语句,输出结果为字符串“This is an old man!”。

图4-18 IF…ELSE流程控制语句

4.5.3 CASE语句

CASE是多条件分支语句,相比IF…ELSE语句,CASE

语句进行分支流程控制可以使代码更加清晰,易于理解。CASE语句也根据表达式逻辑值的真假来决定执行的代码流程,CASE语句有两种格式。

1. 格式1

在第一种格式中,CASE语句在执行时,将CASE后的表达式的值与各WHEN子句的表达式值比较,如果相等,就执行THEN后面的表达式或语句,然后跳出CASE语句;否则,返回ELSE后面的表达式。

【例4.24】使用CASE语句根据学生姓名判断各个学生在班级的职位,输入语句如下。

代码执行结果如图4-19所示。

图4-19 使用CASE语句对学生职位进行判断

2. 格式2

在第二种格式中,CASE关键字后面没有表达式,多个WHEN子句中的表达式依次执行,如果表达式结果为真,就执行相应THEN关键字后面的表达式或语句,执行完毕之后跳出CASE语句。如果所有WHEN语句都为FALSE,则执行ELSE子句中的语句。

【例4.25】使用CASE语句对考试成绩进行评定,输入语句如下。

代码执行结果如图4-20所示。

图4-20 使用CASE语句对考试成绩进行评价

4.5.4 WHILE语句

WHILE语句根据条件重复执行一条或多条T-SQL代码,只要条件表达式为真,就循环执行语句。在WHILE语句中,可以通过CONTINUE或者BREAK语句跳出循环。WHILE语句的基本语法格式如下。

     WHILE Boolean_expression
     { sql_statement | statement_block }
     [ BREAK | CONTINUE ]

主要参数介绍如下:

【例4.26】WHILE循环语句的使用,输入语句如下。

该段代码执行过程如图4-21所示。

图4-21 WHILE循环语句中的语句块嵌套

4.5.5 GOTO语句

GOTO语句表示将执行流更改到标签处。跳过GOTO后面的Transact-SQL语句,并从标签位置继续处理。GOTO语句和标签可在过程、批处理或语句块中的任何位置使用。GOTO语句的语法格式如下。

定义标签名称,使用GOTO语句跳转时要指定跳转标签名称。

     label :

使用GOTO语句跳转到标签处。

     GOTO label

【例4.27】GOTO语句的使用,输入语句如下。

     USE test_db;
     BEGIN
     SELECT s_name FROM stu_info;
     GOTO jump
     SELECT s_score FROM stu_info;
     jump:
     PRINT '第二条SELECT语句没有执行';
     END

图4-22 GOTO语句

代码执行结果如图4-22所示。

4.5.6 WAITFOR语句

WAITFOR语句用来暂时停止程序的执行,直到所设定的等待时间已过或所设定的时刻快到才继续往下执行。延迟时间和时刻的格式为“HH:MM:SS”。在WAITFOR语句中不能指定日期,并且时间长度不能超过24小时。WAITFOR语句的语法格式如下。

主要参数介绍如下:

【例4.28】10s的延迟后执行SET语句,输入语句如下。

     DECLARE @name VARCHAR(50);
     SET @name='admin';
     BEGIN
     WAITFOR DELAY '00:00:10';
     PRINT @name;
     END;

代码执行结果如图4-23所示。

该段代码为@name赋值后,并不能立刻显示该变量的值,延迟10秒钟后将看到输出结果。

图4-23 WAITFOR语句

4.5.7 RETURN语句

RETURN表示从查询或过程中无条件退出。RETURN的执行是即时且完全的,可在任何时候用于从过程、批处理或语句块中退出。RETURN之后的语句是不执行的。语法格式如下:

     RETURN [ integer_expression ]

integer_expression为返回的整数值。存储过程可向执行调用的过程或应用程序返回一个整数值。

提示

除非另有说明,所有系统存储过程均返回0值。此值表示成功,而非零值则表示失败。RETURN语句不能返回空值。 DbUCNotmBYIsPE7J0tIGclCNrAPkRtNdYByHkbofabRQzvjYaZfP1kBh6b7Q8QqM

点击中间区域
呼出菜单
上一章
目录
下一章
×