declare sql语句_SQL高级知识V2——流程控制

点击上方SQL数据库开发,关注获取SQL视频教程

SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

流程控制的定义

一般是指用来控制程序执行和流程分至点额命令,一般指的是逻辑计算部分的控制。

流程控制种类

常见的流程控制有以下8种

BEGIN ... ENDWAITFORGOTO
WHILEIF ... ELSEBREAK
RETURNCONTINUE

下面给大家具体介绍每种流程控制的用法。

BEGIN...END

BEGIN ... END语句用于将多个T-SQL语句合为一个逻辑块。当流程控制语句必须执行一个包含两条或两条以上的T-SQL语句的语句块时,使用BEGIN ... END语句。

语法

BEGIN  

sql_statement... 

END

示例

我们在数据库中打印出我们公众号的名称"SQL数据库开发"

DECLARE @A VARCHAR(20)SET @A='SQL数据库开发'BEGINSELECT @AEND

结果如下:

87eb3d069262ac78da2151040a2f0852.png

这里的SELECT @A就是一条被执行的命令语句。

IF [...ELSE]

IF [...ELSE]表示可以只使用IF,也可以IF和ELSE一起使用,表示条件判断。当满足某个条件使,就执行IF 下面的语句,否则执行ELSE下面的语句

IF语法

IF 

 {命令行 | 程序块}

IF示例

如果某字符串的长度大于5,就打印该字符串

DECLARE @A VARCHAR(20)SET @A='SQL数据库开发'IF LEN(@A)>5SELECT @A

结果:

87eb3d069262ac78da2151040a2f0852.png

这里结果与上面的BEGIN...END一样,但是如果我们将条件改成大于8,结果可能就不是这样的了,小伙伴们可以试一下。

IF...ELSE语法

IF  

{命令行 | 程序块} 

ELSE {命令行 | 程序块}

IF...ELSE示例

如果字符串的长度大于10,就打印该字符串,否则打印"字符串长度太短"

DECLARE @A VARCHAR(20)SET @A='SQL数据库开发'IF LEN(@A)>10SELECT @AELSESELECT '字符串长度太短'

结果:

e7ba039e232c9adca76f8dd0b7be338f.png

很明显字符串"SQL数据库开发"长度不大于10,所以返回ELSE里的结果了。

WHILE

WHILE是循环控制,当满足WHILE后面的条件后,就可以循环执行WHILE下面的语句。通常与CONTINUE和BREAK一起使用,Break命令让程序完全跳出循环语句,结束WHILE命令,CONTINUE是让命令继续返回执行

语法

WHILE  

 {命令行 | 程序块} 

CONTINUE 

{命令行 | 程序块} 

BREAK 

{命令行 | 程序块}

示例

有1到10这样一组数字,从1按顺序开始,遇到偶数就跳过,遇到奇数就打印出来,当遇到9就结束打印。

DECLARE @i int;SET @i = 0;WHILE(@i < 10)BEGIN    SET @i = @i + 1;    IF(@i % 2 = 0)    BEGIN        PRINT ('跳过偶数数' + CAST(@i AS varchar));        CONTINUE;    END    ELSE IF (@i = 9)    BEGIN        PRINT ('到' + CAST(@i AS varchar) + '就结束打印');        BREAK;    END    PRINT @i;END

结果如下:

ec85a123d449a5152eef114ffcf27821.png

我们只正常打印出来了1-3-5-7其他的不是跳过就是到9就结束了。

RETURN

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

语法

RETURN [整数表达式]

示例

BEGIN    PRINT(1);    PRINT(2);    RETURN ;    PRINT(3);    --在RETURN之后的代码不会被执行,因为会跳过当前批处理    PRINT(4);ENDGOBEGIN    PRINT(5);END

结果如下:

984a7414c25d52bfb496f0af9ad3d8a5.png

RETURN后面的3-4都没打印,说明在当前批处理的RETURN后都没执行,而新起的BEGIN...END不受上面的RETURN影响,所以打印了5

GOTO

GOTO命令用来改变程序执行的流程,使程序跳转到标识符指定的程序行再继续往下执行。

GOTO命令虽然增加了程序设计的灵活性,但破坏了程序的结构化,使程序结构变得复杂而且难以测试。

注意:

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

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

语法

GOTO  标识符

示例

DECLARE @i INT;SET @i = 1;PRINT @i;SET @i = 2;PRINT @i;GOTO ME;SET @i = 3;  --这行被跳过了PRINT @i;ME:PRINT('跳到我了?');PRINT @i

结果如下:

39a264cc2b6527412ae1a2c1356030dc.png

从上面可以看出,当跳到ME的时候,GOTO之前的数有打印,之后的数就跳过了

WAITFOR

用于挂起语句的执行,直到指定的时间点或者指定的时间间隔。

注意:

WAITFOR常用语某个特定的时间点或时间间隔自动执行某些任务。在WAITFOR语句中不能包含打开游标,定义视图这样的操作。在包含事务的语句中不要使用WAITFOR语句,因为WAITFOR语句在时间点或时间间隔执行期间将一直拥有对象的锁,当事务中包含WAITFOR语句,事务的其他语句又需要访问被锁住的数据对象事就容易发生死锁现象。

指定时间点的语法

WAITFOR   TIME 

示例

在'08:10:00'执行打印字符串"SQL数据库开发"

WAITFOR TIME  '08:10:00'PRINT 'SQL数据库开发'

如果你执行这句话,那如果在今天这个点之前,那么等到这个时候它就会打印字符串,如果在今天这个点之后,那你需要等到第二天的这个时间点才会打印。在未执行之前查询窗口是一直"正在执行查询..."状态

32e171994ba138732bb0c979eb3328c3.png

指定等待时间间隔的语法

WAITFOR DELAY  'INTERVAR'

INTERVAR为时间间隔,指定执行WAITFOR 语句之前需要等待的时间,最多为24小时。

示例

WAITFOR DELAY  '00:00:03'PRINT 'SQL数据库开发'

在等到3秒钟后,会打印出字符串

7adf1d8ba1b9b033f46908d46f7a2f5e.png

批注

流程控制是SQL开发中经常需要使用到的,特别是条件判断IF...ELSE,循环执行WHILE是经常使用的,对于想在SQL开发中有所提高的同学,务必要掌握这几个流程控制的用法。

公众号内回复1,拉你进微信交流群

长按下方二维码加入我们的SQL训练营

f6bac7c2ae739f46e3073686fe1affcb.png

点击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值