流程控制
- 1. 概述
- 2. BEGIN...END 块语句
- 3. IF 单分支语句
- 4. IF...ELSE 双分支语句
- 6. CASE 多分支语句
- 7. WHILE 循环语句
- 8. WHILE···CONTINUE···BREAK 中断语句
- 9. RETURE 返回语句
- 10. GOTO 跳转语句
1. 概述
T-SQL 的流程控制命令与常见的程序设计语言相似,主要有条件、循环、等待等几种控制命令;
T-SQL 流程控制关键字如下表:
2. BEGIN…END 块语句
BEGIN...END
用来设定一个程序块,将在 BEGIN...END
内的所有程序设为一个单元执行;BEGIN...END
经常在条件语句(如 IF...ELSE
)中使用,在 BEGIN...END
中可嵌套另外的 BEGIN...END
来定义另一程序块;
语法格式如下:
BEGIN
{
sql_statement
| statement_block
}
END
{sql_statement | statement_block }
是任何有效的 T-SQL 语句或以语句块的语句分组;BEGIN...END
语句块允许嵌套;虽然所有的 T-SQL 语句在 BEGIN…END 块内都有效,但有些 T-SQL 语句不应组合在同一批处理(语句块)中;
3. IF 单分支语句
IF 单分支语句是用来判定所给定的条件是否满足的,根据判定的结果(真或假)决定执行给出的两种操作之一;
执行流程图如下所示:
语法形式如下:
IF Boolean_expression
{sql_ststemetn | statement_block}
-
Boolean_expression
:返回 TRUE 或 FALSE 的布尔表达式;若布尔表达式中含有 SELECT 语句,就必须用圆括号将 SELECT 语句括起来; -
{sql_statement | statement_block }
:Transaction-SQL 语句或用语句块定义的语句分组;除非使用语句块,否则 IF 或 ELSE 条件只能影响一个 T-SQL 语句性能;
4. IF…ELSE 双分支语句
IF...ELSE
语句是条件控制语句,语法格式如下:
IF<条件表达式>
<命令行或程序块>
[ELSE [条件表达式]
<命令行或程序块>]
<条件表达式> 可以是各种表达式的组合,但表达式的值必须是逻辑值“真”或“假”;
ELSE 子句是可选的,最简单 IF 语句没有 ELSE 子句部分;
IF...ELSE
用来判断当某一条件成立时执行某段程序;
条件不成立时执行另一端程序,若不使用程序块,IF 或 ELSE 只能执行一条命令;
IF···ELSE 能进行嵌套;
执行流程图如下所示:
6. CASE 多分支语句
CASE
命令能嵌套到 SQL 命令中,它是多条件的分支语句;在 T-SQL 中,CASE 命令有两种语句格式:
CASE <input_expression>
WHERE <when_exprssion>THEN<result_expression>
...
WHEN <when_expression>THEN<result_expression>
[ELSE<else_result_exprssion>]
END
上述格式称为简单 CASE 函数
,其功能为将某个表达式与一组简单表达式进行比较确定结果;
执行步骤如下所示:
- 计算
input_expression
的值; - 按指定顺序对每个
WHEN 子句
的input_expression=where_expression
进行计算,返回input_expression=where_expression
的第一个计算结果为 TRUE 的result_expression
; - 若
input_expression = when_expression
计算结果不为 TRUE,就在指定 ELSE 子句的情况下将返回else_result_expression
;若没有指定 ELSE 子句,则返回NULL
值;
执行流程图如下所示:
另一种语句格式为使用CASE 搜索函数
计算一组布尔表达式以确定结果;在SELECT 语句
中,CASE 搜索函数
允许根据比较值在结果集进行替换;
语法格式如下所示:
CASE
WHEN <条件表达式> THEN <运算式>
WHEN <条件表达式> THEN <运算式>
[ELSE <运算式>]
END
注意: 执行 CASE 子句时,只运行第一个匹配的子名;
7. WHILE 循环语句
设置重复执行 SQL 语句或语句块的条件;只要指定的条件为真,就重复执行语句;
能使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环
中的语句的执行;
语法格式如下:
WHILE Boolean_expression
{sql_statement | statement_block }
[BREAK]
{sql_statement | statement_block}
[CONTINUE]
-
Boolean_expression
:返回 TRUE 或 FALSE 的表达式,若布尔表达式中含有 SELECT 语句,就必须用圆括号将 SELECT 语句括起来; -
{sql_statement | statement_block}
:T-SQL 语句或用语句块定义的语句分组,若要定义语句块,请使用控制流关键字 BEGIN 和 END; -
BREAK
:导致从最内层 WHILE 循环中退出;将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束的标记; -
CONTINUE
:使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句;
注意: 若嵌套了两个或多个 WHILE 循环,内层的 BREAK
将导致退出到下一个外层循环;首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行;
8. WHILE···CONTINUE···BREAK 中断语句
WHILE 命令
在设定的条件成立时会重复执行或程序块;CONTINUE 命令
能让程序跳过 CONTINUE 命令
之后的语句,回到 WHILE 循环
的第一个行命令;BREAK 命令
则让程序完全跳出循环,结束 WHILE 命令的执行;
语法个格式如下:
WHILE <条件表达式>
BEGIN
<命令行或程序行>
[BREAK]
[CONTINUE]
[命令行或程序块]
END
9. RETURE 返回语句
RETURE 命令
用于结束当前程序的执行,返回到上一调用它的程序或其他程序,在括号内可指定一个返回值;
语法格式如下:
RETURN [整数值]
注意: 若用户定义了返回值,就返回用户定义的值;若没有指定返回值,SQL Server 系统会根据程序执行的结果返回一个内定值,具体值如下表;若运行过程产生了多个错误,SQL Server 系统将返回绝对值最大的数值,RETURN 语句不能返回 NULL 值;
10. GOTO 跳转语句
GOTO 命令
用来改变程序执行的流程,使程序跳到标有标识符的指定的程序行再继续往下执行;
作为跳转目标的标识符可为数字与字符的组合,但必须以 “:”
结尾,如 “14:” 或 “C_2:”;在 GOTO 命令行,标识符后不必带 ":"
;
语法格式如下:
GOTO 标识符