聊聊 SQL 中的流程控制,你明白了吗?

流程控制的定义

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

流程控制种类

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

BEGIN … END

WAITFOR

GOTO

WHILE

IF … ELSE

BREAK

RETURN

CONTINUE

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

BEGIN…END

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

语法

  • BEGIN
  • sql_statement…
  • END

示例

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

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

结果如下:

这里的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)>5
SELECT @A

结果:

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

IF…ELSE语法

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

IF…ELSE示例

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

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

结果:

很明显字符串”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 ASvarchar));
CONTINUE;
END
ELSE IF (@i =9)
BEGIN
PRINT ('到'+ CAST(@i ASvarchar)+'就结束打印');
BREAK;
END
PRINT @i;
END

结果如下:

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

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

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

结果如下:

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

WAITFOR

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

注意:

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

指定时间点的语法

WAITFOR   TIME <具体时间>

示例

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

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

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

指定等待时间间隔的语法

  • WAITFOR DELAY  ‘INTERVAR’

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

示例

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

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

总结

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

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/264427.html<

(0)
管理的头像管理
上一篇2025-05-05 00:49
下一篇 2025-05-05 00:51

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注