流程控制

  • 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 流程控制关键字如下表:

在容器里执行sql语句 在sqlserver数据库中,执行sql语句_sqlserver

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 单分支语句是用来判定所给定的条件是否满足的,根据判定的结果(真或假)决定执行给出的两种操作之一;

执行流程图如下所示:

在容器里执行sql语句 在sqlserver数据库中,执行sql语句_单/双/多分支语句_02


语法形式如下:

IF Boolean_expression
    {sql_ststemetn | statement_block}
  1. Boolean_expression:返回 TRUE 或 FALSE 的布尔表达式;若布尔表达式中含有 SELECT 语句,就必须用圆括号将 SELECT 语句括起来;
  2. {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 能进行嵌套;

执行流程图如下所示:

在容器里执行sql语句 在sqlserver数据库中,执行sql语句_sqlserver_03

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 函数,其功能为将某个表达式与一组简单表达式进行比较确定结果;
执行步骤如下所示:

  1. 计算 input_expression 的值;
  2. 按指定顺序对每个 WHEN 子句input_expression=where_expression 进行计算,返回 input_expression=where_expression 的第一个计算结果为 TRUEresult_expression
  3. 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]
  1. Boolean_expression:返回 TRUE 或 FALSE 的表达式,若布尔表达式中含有 SELECT 语句,就必须用圆括号将 SELECT 语句括起来;
  2. {sql_statement | statement_block}:T-SQL 语句或用语句块定义的语句分组,若要定义语句块,请使用控制流关键字 BEGIN 和 END;
  3. BREAK:导致从最内层 WHILE 循环中退出;将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束的标记;
  4. 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 值;

在容器里执行sql语句 在sqlserver数据库中,执行sql语句_单/双/多分支语句_04

10. GOTO 跳转语句

GOTO 命令用来改变程序执行的流程,使程序跳到标有标识符的指定的程序行再继续往下执行;
作为跳转目标的标识符可为数字与字符的组合,但必须以 “:” 结尾,如 “14:” 或 “C_2:”;在 GOTO 命令行,标识符后不必带 ":"
语法格式如下:

GOTO 标识符