--流程控制
--begin end --语句块,将多个t-sql 语句组合成一个逻辑块,当流程控制语句必须执行一个包含两条或两条以上的t-sql语句时,使用begin end、
begin
declare @a int;
declare @b int;
declare @c int;
select @a=1,@b=2,@c=3;
if @a>=1
begin --执行多条SQL操作时,使用begin end 语句块,否则会报错
print(@a);
print(@b);
end;
else
print(@c);
end;
-- if 结构语法如下:
-- if《条件表达式》
-- {命令行|程序块}
begin
declare @num int;
set @num = 10;
if @num%2 =0
print('是偶数!');
end;
--case 语句进行多重选择 比if then 结构有更多的选择和判断机会避免多重 if then嵌套循环
--case 语法
-- case input_expression
--when when_expression then result_expression
--[...n]
--[
--else else_result_expression
--end
select id,name,age,
性别 =case
when gender='man' then '男人'
when gender='woman' then '女人'
else '人妖'
end
from stduser;
--while 子句 是t-sql 语句支持的循环结构,在条件为真的情况下,while 字句可以循环的执行其最后的一条t-sql命令,
--如果想循环执行一组命令则需要和begin end 配合使用。
-- while <条件表达式>
-- begin
-- <命令行|程序块>
-- end
declare @n int,@sum int;
set @n=1;
set @sum=0;
while @n<=10
begin
set @sum += @n;
set @n += 1;
print(@sum);
print(@n);
end;
--while ... continue ...break
-- 循环while 字句还可以用continue 和break 命令控制while循环中语句的执行。
--while <条件>
-- begin
-- if <条件>
-- continue 跳过操作
-- if <条件>
-- break 终止循环操作
-- end
begin
declare @n1 int;
set @n1 = 1;
while @n1 < 10
begin
if @n1=5 -- 当 @n1 的值为 5时 就跳过 ,后面的代码就不去执行了,-- 注意 ,如果在if 里面会执行多条sql 那么请一定使用begin end 语句块来包裹
begin
set @n1 = 6;
continue
end;
if @n1=8 -- 当@n1 的值为 8 时 就结束循环
break
print(@n1);
set @n1 += 1;
end;
end;
--return 语句用于从查询或过程中无条件退出,return 语句可在任何时候用于从过程,批处理,或语句块中退出,位于return之后的语句不会被执行。
-- return 整数值
-- return命令返回的内定值。
-- -1 找不到对象, -7 资源错误,如磁盘空间不足
-- -2 数据类型错误 -8 非致命的部内部错误
-- -3 死锁 -9 以达到系统的极限
-- -4 违反权限原则 -10或-11 致命的内部不一致性错误
-- -5 语法错误 -12 表或者指针破坏
-- -6 用户造成的一般错误 -13数据库破坏
-- F 程序执行成功
begin
declare @n2 int;
set @n2 = 1;
while @n2 < 10
begin
if @n2 = 3
return
print(@n2);
set @n2 += 1;
end;
end;
-- waitfor 指定触发器,存储过程,或者事务执行的时间,时间间隔,或者事件,还可以用来暂时停止程序的执行,直到所设定的等待时间已经过才继续往下执行。
-- 语法 waitfor delay<'时间'>| time<'时间'>
-- 时间必须为 datetime 类型的数据,如: 11:15:27,单不能包含日期
-- delay 用来设定等待时间,最多为24小时
-- time 用来设定等待结束的时间点
-- 例如,等待3秒后显示祝你升入快乐
waitfor delay '0:00:03' print('生日快乐!');