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