ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

43 流程控制

2021-07-30 17:36:06  阅读:160  来源: 互联网

标签:语句 控制 RETURN ... 流程 WAITFOR 43 SQL PRINT


43.1 流程控制的定义

一般是指用来控制程序执行,一般指的是逻辑计算部分的控制。

 

43.2 流程控制种类

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

BEGIN ... END

WHILE

RETURN

WAITFOR

IF ... ELSE
CONTINUE

GOTO

BREAK

 

43.3 BEGIN ... END

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

语法:

BEGING
SQL Statement...
END

示例,我们在数据库中打印出“SQL数据库开发”

DECLARE @A VARCHAR(20)
SET @A='SQL数据库开发'
BEGIN
SELECT @A
END

结果为:

 

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

 

43.4 IF [... ELSE]

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

IF语法:

IF <条件表达式>
{命令行|程序块}

IF示例:

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

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

结果:

 

 这里结果与上面的BEGIN ... END一样,但是如果将条件改成大于8,结果就不是这样了。

 

IF ... ELSE语法:

IF <条件表达式>
{命令行|程序块}
ELSE {命令行|程序块}

IF ... ELSE示例:

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

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

结果:

 

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

 

43.5 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

结果:

 

43.6 RETURN

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

语法:

RETURN [整数表达式]

示例:

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

BEGIN
PRINT(5);
END

结果:

 

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

 

43.7 GOTO

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

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

注意:

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

(2)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

结果如下:

 

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

 

43.8 WAITFOR

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

 

注意:

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

 

指定时间点的语法:

WAITFOR TIME <具体时间>

示例:

在'17:10:00'执行打印字符串“SQL数据库开发”

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

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

 

指定等待时间间隔的语法:

WAITFOR DELAY 'INTERVAR'

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

示例:

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

在等待30秒钟后,会打印出字符串。

 

43.9 批注

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

 

标签:语句,控制,RETURN,...,流程,WAITFOR,43,SQL,PRINT
来源: https://www.cnblogs.com/yongzhao/p/15072244.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有