当前位置: 首页 > news >正文

流程控制语句

目录

前言

一、SET 语句

二、BEGIN ··· END 语句

三、IF ··· ELSE 语句

四、CASE 语句

五、WHILE 语句

六、GOTO 语句

七、RETURN 语句


前言

        T-SQL 提供了用于编写过程性代码的语法结构,可用来进行顺序、分支、循环、存储过程等程序设计,编写结构化的模块代码,从而提高编程语言的处理能力。

流程控制语句
控制语句说明控制语句说明
SET赋值语句CONTINUE重新开始下一次循环
BEGIN ··· END定义语句块BREAK退出循环
IF ··· ELSE条件语句GOTO无条件转移语句
CASE分支语句RETURN无条件推出语句
WHILE循环语句

一、SET 语句

        声明一个变量后,这个变量将被初始化为 NULL,使用 SET语句将给这个变量重新赋值。

--  语法格式

SET  @local_variable  =  expression

        SET 语句是顺序执行的,将一个表达式赋值给声明的变量。表达式的数据类型必须与变量的类型相符合。

--  示例:

declare   @myvar   char(20);

set  @myvar  =  ' this  is  a  test ';

select  @myvar;

go

        除了复制功能以外,SET 语句也实现一些设置功能,如设置日期类型的数据格式、设置数据库的某些属性等。

二、BEGIN ··· END 语句

        BEGIN ··· END 语句能够将多个 T-SQL 语句组合成一个语句块,并将它们视为一个单元处理。

--  语法格式

BEDIN

{

        --  SQL 语句

}

END

三、IF ··· ELSE 语句

--  语法格式

IF  (条件表达式)

{

        --  条件表达式为真时,执行。

}

ELSE

{

        --  条件表达式为假时,执行。

}

--  在条件表达式中,可存在 SELECT 语句。

--  其中,条件表达式的值,必须为布尔值。如果条件表达式中存在 SELECT 语句时,必须用括号跨起来。

--  示例:如果 C001号课程的平均成绩高于80分,则显示 ‘ 平均成绩还不错 ’ ,否则显示 ‘ 平均成绩一般 ’ 。

if  (select  avg(score)  from  sc  where  cno = 'C001') > 80

        print  ' 平均成绩还不错 '

else

        print  ' 平均成绩一般 '

--  示例:输出 201502001 号学生的平均成绩,如果没有这个学生或该学生没有选课,则显示相应的提示信息。

if  exists (select  * from sc where  sno = '201502001')

        select  avg(score)  from  sc  where  sno = '201502001'

else

        if  exists (select  * from  student  where  sno = '201502001')

                print  '该学生没有选课'

        else

                print  '没有该学生'

四、CASE 语句

        使用 CASE 语句可以进行多个分支的选择。

        CASE 具有下面两种语法格式。

  • 简单 CASE 格式:将某个表达式与一组简单表达式进行比较,以确定结果。
  • 搜索 CASE 格式:计算一组布尔表达式,以确定结果。

--  简单 CASE 语法格式

CASE   input_expression

WHEN  when_expression   THEN   result_expression

[ ... n ]

[ ELSE   else_result_expression ]

END

--  搜索 CASE 格式

CASE

        WHEN  Boolean_expression   THEN   result_expression

        [ ... n ]

        [ ELSE   else_result_expression ]

END

--  input_expression:是使用简单 CASE 格式时所计算的表达式。

--  WHEN  when_expression:使用简单 CASE格式时,input_expression 所比较的简单表达式。when_expression 是任意有效的表达式,when_expression 与  input_expression 的数据类型必须相同,或存在隐性转换。

--  THEN   result_expression:当 input_expression = when_expression 的值为 TRUE 时,或者 Boolean_expression 取值为 TRUE时,返回的表达式。

--  ELSE   else_result_expression:当比较运算取值不为 TRUE 时,返回的表达式。如果省略此参数,并且比较运算的值不为 TRUE 时,CASE 将返回 NULL 值。

--  WHEN  Boolean_expression:使用 CASE 搜索格式时,所计算的布尔表达式。

--  示例:以简单 case 格式查询所有学生的专业情况,包括学号,姓名和专业的英文名。

select   sno, sname,

        case  specialty

        when  '计算机'  then  'Computer'

        when  '电子信息'  then  'Electronic  Information'

        when  '通信工程'  then  'Communication  Engineering'

        else   'Network   Engineering'

end   as  specialty

from  student

--  以搜索 CASE 格式查询所有学生的考试等级,包括学号,课程号和成绩级别(a、b、c、d)。

select  sno,  cno, 

        case

        when  score>= 90   then   'a'

        when  score>= 80   then   'b'

        when  score>= 70   then   'c'

        when  score>= 60   then   'd'

        end  as  等级

from  sc

五、WHILE 语句

        WHILE 是一个循环语句,通过布尔值来设置一个条件,当这个条件成立时,重复执行循环体。可以使用 BREAK 和 CONTINUE 关键字在循环中控制 WHILE循环种语句的执行顺序。

--  语法格式

WHILE   ( 条件表达式 )

        --  循环体

        BREAK 命令的功能是让程序跳出循环体,而 CONTINUE 命令是让程序跳出本次循环。通常情况下, BREAK 和 CONTINUE 是放在 IF ··· ELSE 语句种的,即在满足条件的情况下,判断是跳出循环还是进入下一次循环。

--  示例:创建一个临时表 #TempOrder,包含 userid 和 username两个字段,使用 while 循环向这个表中添加10条数据,并查看表中的数据。

create  table  #TempOrder

(

        userid   int,

        username   nchar(10)

)

go

declare  @i  int;

set  @i  =  1;

while  @i <= 10

begin

        insert  into  #TempOrder(userid, username)

        values

        ( @i, 'user' + ltrim(str(@i)) )

        set  @i  += 1

end

go

select  *  from  #TempOrder

go

drop  table  #TempOrder

--  示例:求1 ~ 100 的累加和,包含 100。

declare  @i  int  = 1, @sum  int  = 0

while  @i <= 100

begin

        set  @sum += @i

        set  @i  += 1

end

select  @sum

六、GOTO 语句

        GOTO 语句可以实现无条件的跳转。

--  语法格式

GOTO   lable   /*  lable为要跳转的到的语句标号  */

--  标号是 GOTO 的目标,它仅标识了跳转的目标。标号不隔离其前后的语句,执行标号前面的用户将跳过标号并执行标号后面的语句。除法标号前面的语句本身是控制流语句(如RETURN)。

--  示例:用 goto 实现循环:求 1 ~ 100 的和,包括100。

declare  @i  int  = 1,  @sum   int  = 0

my_loop:

        set   @sum  +=  @i;

        set   @i  +=  1;

if @i < = 100   goto  my_loop

print  @sum

--  输出 201602001号学生的平均成绩,若没有该学生或该学生没有选课,则显示相应的提示信息,用 goto 语句实现。

declare  @avg   float

if (select  count(*)  from  sc where  sno = '201602001') = 0   goto  label

select   @avg = avg(score)  from  sc  where   sno = '201602001'

print  '201602001号学生的平均成绩为:' + cast(@avg  as  varchar)

return

label:  print  '没有该学生 或该学生没有选课'

        一般来说,应尽量少用 GOTO 语句。过多使用 GOTO 语句可能会使 T-SQL 批处理的逻辑难以理解。使用 GOTO 实现的逻辑几乎都可以使用其它控制流语句实现。GOTO 最好用于跳出深层嵌套的控制流语句。

七、RETURN 语句

        使用 RETURN 语句,可以从查询或过程种无条件退出。可在任何时候用于从过程、批处理、语句块种退出,而 RETURN之后的语句不会被执行。

--  语法格式

RETURN   [ integer_expression ]    /*   整形表达式  */

 

--  整形表达式为一个整数值,是 RETURN 语句要返回的值。

注:当用于存储过程时,不能返回空值。如果试图返回空值,将生成警告信息,并返回 0 值。

--  示例:利用存储过程求某个学生的平均成绩。

create   procedure  mypro

@sno   char(20)

as

return  (select  avg(score)  from  sc  where  sno = @sno)

--  创建查询:查询 201602001号学生的姓名和平均成绩。

declare  @avg  float,  @sno   char(20)

set   @sno = '201602001'

exec   @avg = mypro  @sno

select   sname, @avg  as  '平均成绩'  from  student  where  sno = @sno

欢迎大家一起讨论,若有不足之处还请斧正。

相关文章:

流程控制语句

目录 前言 一、SET 语句 二、BEGIN END 语句 三、IF ELSE 语句 四、CASE 语句 五、WHILE 语句 六、GOTO 语句 七、RETURN 语句 前言 T-SQL 提供了用于编写过程性代码的语法结构&#xff0c;可用来进行顺序、分支、循环、存储过程等程序设计&#xff0c;编写结构化的模…...

杰发科技AC7840——SENT数据解析及软件Sent发送的实现

0. 测试环境 AC7840官方Demo板&#xff1b; 图莫斯0503 DSlogic U2Basic 使用引脚 输出脚&#xff1a;PB1 时钟&#xff1a;PB2&#xff0c;其他引脚可以不初始化&#xff0c;不接线 1. 数据解析 以下是SENT数据的格式&#xff08;1tick以3us为例&#xff09;&#…...

Java后端开发(十五)-- Ubuntu 开启activemq开机自启动功能

目录 1. 修改Wrapper.conf文件配置内容 2. 在/etc/systemd/system目录下创建activemq.service文件 3. 重启服务器,验证是否生效 4. 系统启动目标问题 操作环境: 1、Ubuntu 22.04.4 LTS (GNU/Linux 6.5.0-28-generic x86_64) 2、jdk17.0.11 3、apache-activemq-6.0.1 1. 修…...

56 网络层

本节重点 理解网络层的作用&#xff0c;深入理解IP协议的基本原理 对整个TCP/IP协议有系统的理解 对TCP/IP协议体系下的其他重要协议和技术有一定的了解 目录 前置认识ip协议基本概念协议头格式网段划分特殊的ip地址ip地址的数量限制私有ip和公有ip路由路由表生成算法 在复杂…...

MAC地址泛洪——华为ensp

首先搭建好网络拓扑&#xff0c;包含客户端、服务端、一台交换机 以及 云。 客户端client1和服务端server1各自配置好IP地址&#xff0c;服务端充当FTP服务器&#xff0c;启动ftp服务 其中要先配置cloud1相关配置&#xff0c;然后才可以进行连线&#xff0c; 第一步进行端口…...

golang 字符编码 gbk/gb2312 utf8编码相互转换,判断字符是否gbk编码函数, 字符编码转换基础原理解析, golang默认编码utf8

虽然golang里面的默认编码都是统一的unicode utf8编码&#xff0c; 但是我们在调用外部系统提供的api时&#xff0c;就可能会遇到别人的接口提供的编码非 utf8编码&#xff0c;而是gbk/gb2312编码&#xff0c; 这时候我们就必须要将别人的gbk编码转换为go语言里面的默认编码ut…...

CentOS(7.x、8)上安装EMQX

EMQX 是一个高度可扩展的分布式 MQTT 消息服务器&#xff0c;适用于 IoT、M2M 和移动应用程序。以下是在 CentOS 系统上安装 EMQX 的基本步骤&#xff1a; 在 CentOS 上安装 EMQ X 步骤 1: 添加 EMQ X YUM 源 首先&#xff0c;你需要添加 EMQ X 的官方 YUM 源到你的 CentOS 系…...

Mojo模型魔法:动态定制特征转换的艺术

标题&#xff1a;Mojo模型魔法&#xff1a;动态定制特征转换的艺术 在机器学习领域&#xff0c;模型的灵活性和可扩展性是至关重要的。Mojo模型&#xff08;Model-as-a-Service&#xff09;提供了一种将机器学习模型部署为服务的方式&#xff0c;允许开发者和数据科学家轻松地…...

多任务高斯过程数学原理和Pytorch实现示例

高斯过程其在回归任务中的应用我们都很熟悉了&#xff0c;但是我们一般介绍的都是针对单个任务的&#xff0c;也就是单个输出。本文我们将讨论扩展到多任务gp&#xff0c;强调它们的好处和实际实现。 本文将介绍如何通过共区域化的内在模型(ICM)和共区域化的线性模型(LMC)&…...

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一&#xff1a;ppt把当前页输出为图片&#xff1a;内容二&#xff1a;ppt导出图片模糊的解决方法&#xff1a;方法&#xff1a;步骤1&#xff1a;打开注册表编辑器步骤2&#xff1a;修改注册表&#xff1a; 该文…...

TeraTerm 使用技巧

参考资料 自分がよく使うTeratermマクロによる自動ログインのやり方をまとめてみたよTera Term マクロでログインを自動化してみたTera Term のススメ 目录 简介一. 常用基础设置1.1 语言变更1.2 log设置 二. 小技巧2.1 指定host别名2.2 新开窗口2.3 设置粘贴多行命令时的行间…...

意得润色打折啦

新注册使用可以减15%&#xff0c;ABSJU202&#xff0c;直接使用哦ㅤ 此外&#xff0c;如果老板经费充足&#xff0c;预算高&#xff0c;完全可以试试他家的投稿套餐&#xff0c;科学深度编辑&#xff0c;从期刊选择&#xff0c;到投稿协助&#xff0c;投稿信都帮你写好&#xf…...

微软研发致胜策略 06:学无止境

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1994 年发布。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Debugging the Development Process》&#xff0c;这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…...

学习大数据DAY21 Linux基本指令2

目录 思维导图 搜索查看查找类 find 从指定目录查找文件 head 与 tail 查看行 cat 查看内容 more 查看大内容 grep 过滤查找 history 查看已经执行过的历史命令 wc 统计文件 du 查看空间 管道符号 | 配合命令使用 上机练习 4 解压安装类 zip unzip 压缩解压 tar …...

【18】Android 线程间通信(三) - Handler

概述 接下来我们会从native层来分析一下&#xff0c;Handler做了什么&#xff0c;以及之前提到过的应用层的两个native的调用链。 nativeWake 最早接触这个方法还记得是什么时候吗&#xff1f;MessageQueue#enqueueMessage中&#xff0c;在这个方法的末尾&#xff0c;我们看…...

静态路由技术

一、路由的概念 路由是指指导IP报文发送的路径信息。 二、路由表的结构 1、Destination/Mask:IP报文的接收方的IP地址及其子网掩码; 2、proto:协议(Static:静态路由协议,Direct:表示直连路由) 3、pref:优先级(数值和优先级成反比) 4、cost:路由开销(从源到目的…...

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外&#xff0c; 自Spring3.1开始&#xff0c;Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中&#xff1b;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用&#xff0c;将某些数据写入到缓存中间件…...

@RequestBody接收到的参数中如何限制List的长度?

在Spring MVC中&#xff0c;你可以使用Valid注解和自定义的验证注解来限制List的长度&#xff0c;防止DOS攻击。具体步骤如下&#xff1a; 创建自定义注解&#xff1a;首先&#xff0c;创建一个自定义注解来验证List的长度。 import javax.validation.Constraint; import jav…...

Linux C语言 54-目录操作

Linux C语言 54-目录操作 本节关键字&#xff1a;Linux、C语言、目录操作、遍历目录 相关C库函数&#xff1a;opendir、readdir、closedir 遍历目录 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <…...

Java实战中如何使用多线程(线程池)及其为什么使用?

这个话题在入行之前就想过很多次&#xff0c;很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话&#xff0c;既没有案例也没有什么公式去证明&#xff0c;但是面试中总是被问到&#xff0c;也没有实战经历&#xff0c;所以面试时一问到多线程的东西就无…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...