T-SQL 控制流语句

Go 关键字可以对批量处理的SQLServer 进行分批次处理

 DECLARE @i int;
  SET @i = 1;
  GO        --分批了
  PRINT @i  --@i在这个批里未定义

  输出:

消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@i"

控制流语句不能跨批执行
 DECLARE @i int;
  SET @i = 1;
  IF(@i = 1)
      PRINT('1');
  GO        --分批了
  ELSE
      PRINT('不知道'); --ELSE找不到IF了,控制流语句不跨批,因此报错。

 输出结果如下:

1
消息 156,级别 15,状态 1,第 1 行
关键字 'ELSE' 附近有语法错误。


控制流语句也成为流程控制语句,和高级语言中的控制语句类似,引入控制语句,让T-SQL中的语句由顺序执行,变为按照控制执行。

1、程序块执行语句 Begion ....end
程序块语句 用于多条T-SQL语句封装起来构成一个程序块。SQLServer在处理时,将整个程序块视为一条T-SQL语句执行。

Begin 
    <T-SQL 程序命令行或程序块>
End

   经常与 While或if....else组合起来使用,可以互相嵌套。

  2 判断语句IF.....ELSE

     判断语句用于根据条件判断,是否执行某块语句

  

  if 逻辑表达式
        程序块1
  else 逻辑表达式
       程序块2

3 while循环语句

    while语句用于执行循环,可以根据循环条件重复执行语句块。通常使用break和continue关键字在循环内部进行控制。

        

while <条件表达式>

   〈Sql语句1〉

      break

    〈Sql语句2〉

     continue

      〈Sql语句3〉

 

     break 控制跳出循环,并结束循环体

    continue 让语句跳过〈Sql语句3〉 开始下次判断循环。

 

4 分支判断语句CASE

  CASE 语句用于执行多条件的分支判断。

  语法格式:

  CASE input_expression

   WHEN when_expression

    THEN  result_expression

   END

 

select Id,
    (case 
            when chinese >= 80 then '优秀' 
            when chinese >= 60 then '及格' 
            else  '不及格' 
    end) as 语文,
    (case 
            when math >= 80 then '优秀' 
            when math >= 60 then '及格' 
            else '不及格' 
    end) as 数学,
        (case 
            when english >= 80 then '优秀' 
            when english >= 60 then '及格' 
            else '不及格' 
    end) as 英语
from fenshu

 

   

 5、无条件退出语句RETURN

    RETURN语句用于使程序从一个查询、存储过程或批量处理中无条件返回,其后面的语句不再执行。如果在存储过程中使用return语句,那么此语句可以指定返回给调用应用程序、批处理或过程的整数;如果没有为return指定整数值,那么该存储过程将返回0。

    存储过程返回值:

返回值 含义
0 存储过程执行成功
-1 没有找到数据库对象
-2 数据类型错误
-3 进程死锁错误
-4 进程死锁错误
-5 语法错误
-6 其他用户错误
-7 资源错误
-8 非致命的内部错误
-9 达到系统配置参数极限
-10 内部一致性致命错误
-11 内部一致性致命错误
-12 表或索引崩溃
-13 数据库崩溃
-14 硬件错误



6、无条件跳转语句GOTO

    GOTO语句可以使程序无条件跳转到指定的程序执行点,增加了程序设计的灵活性。但破坏了程序的结构化,使程序结构变得复杂而且难以测试。

    语法:

    GOTO 语句标识符

    使用说明:

     语句标识符可以是数字或者字母的组合,但必须以":"结束。而在GOTO语句后的标识符不必带":"。

    注意事项:

     GOTO语句和跳转标签可以在存储过程、批处理或语句块中的任何地方使用,但不能超出批处理的范围。

  

7、延期执行语句WAITFOR

   延期执行有两种方式,一种是指定时间点,一种是制定时间间隔

 Waitfor{

    time ‘时间点’

}

Begin

 SQL语句

end

 

WaitFor{
  delay ‘时间间隔’
}

Begin 
  SQL语句
End

 

posted @ 2016-08-30 15:39  SoftSteven  阅读(361)  评论(0编辑  收藏  举报