当前位置: 首页 > 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;所以面试时一问到多线程的东西就无…...

kafka集群搭建-使用zookeeper

1.环境准备&#xff1a; 使用如下3台主机搭建zookeeper集群&#xff0c;由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内&#xff0c;故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载&#xff0c;或者使用如…...

【python】Numpy运行报错分析:IndexError与形状不匹配问题

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

你有多自律就有多自由

当你失去对时间的控制权&#xff0c;生活也就失去了平衡。 真正对自己有要求的人&#xff0c;都是高度自律的人。 追求自己想要的生活&#xff0c;任何时候开始都不会晚&#xff0c;关键在于你能够坚持下去&#xff0c;以高度自律的精神&#xff0c;日复一日、年复一年的坚持下…...

Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解

Problem A. Diverse Game Statement 给定 n m n\times m nm 的矩形 a a a&#xff0c; a a a 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同。求出 n m n\times m nm 的矩形 b b b&#xff0c; b b b 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互…...

WSL2 Centos7 Docker服务启动失败怎么办?

wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…...

分布式锁-redisson锁重试和WatchDog机制

抢锁过程中&#xff0c;获得当前线程&#xff0c;通过tryAcquire进行抢锁&#xff0c;该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在&#xff0c;如果不存在&#xff0c;插入一把锁&#xff0c;返回null 2、判断当前这把锁是否是属于当前线程&#xff0c;如果是&a…...

ESP8266模块(2)

实例1 查看附近的WiFi 步骤1&#xff1a;进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件&#xff0c;并设置正确的串口和波特率&#xff08;通常为115200&#xff09;。输入以下命令并按回车确认&#xff1a; AT如果模块响应OK&#xff0c;…...

Docker安装笔记

1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后&#xff0c;左侧菜单选中镜像加速器就可以看到你的专属地…...

《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》

Pix2Pix 是一种图像转换模型&#xff0c;使用条件生成对抗网络&#xff08;Conditional Generative Adversarial Networks&#xff0c;cGANs&#xff09;实现图像到图像的转换。它主要由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…...

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

&#x1f3af;要点 &#x1f3af;算法随机图模型数学概率 | &#x1f3af;图预期度序列数学定义 | &#x1f3af;生成具有任意指数的大型幂律网络&#xff0c;数学计算幂律指数和平均度 | &#x1f3af;随机图分析中巨型连接分量数学理论和推论 | &#x1f3af;生成式多层网络…...

网站建设捌金手指花总二/seo教程seo官网优化详细方法

http://blog.xiongzhijun.com/?cat48...

wordpress 获取当前位置/无锡百度推广开户

目录 前言 一、ImportBeanDefinitionRegistrar 方式一 方式二 二、EnableDubboConfig与DubboComponentScan 三、DubboConfigConfigurationRegistrar与DubboComponentScanRegistrar 扫描并注册Service Bean 扫描并注册Reference Bean 四、EnableDubbo 五、要点总结 前…...

公司网站制作方案/深圳搜索引擎优化收费

前几篇Blog是对Docker的一个入门和初识&#xff0c;本篇Blog开始就详细学习下一个新的理论基础概念&#xff1a;Volume&#xff0c;也就是容器数据卷&#xff0c;听起来名字高大上&#xff0c;实际上就是一个宿主机的目录而已&#xff0c;为什么需要容器数据卷呢&#xff0c;可…...

课程网站建设调研报告/小程序推广的十种方式

Oracle系列&#xff1a;Cursorweb1&#xff0c;什么是游标&#xff1f;①从表中检索出结果集&#xff0c;从中每次指向一条记录进行交互的机制。②关系数据库中的操做是在完整的行集合上执行的。由 SELECT 语句返回的行集合包括知足该语句的 WHERE 子句所列条件的全部行。由该语…...

wordpress+qq音乐插件/小红书推广方式

文章目录1、man命令&#xff08;1&#xff09;man命令的快捷键&#xff08;2&#xff09;man命令的帮助级别&#xff08;了解即可&#xff09;2、info命令3、help命令4、--help选项1、man命令 man是最常见的帮助命令&#xff0c;也是Linux最主要的帮助命令&#xff0c;其基本信…...

如何免费虚拟网站/中国今天新闻最新消息

看过许多有关Jmeter的博客&#xff0c;算得上的收获颇丰&#xff1b;不过最牛逼的博客还是“官方文档”&#xff0c;官方文档是ApacheJmeter自己对自己产品的说明&#xff0c;论起对自己产品的理解程度&#xff0c;那肯定是自己嘛。。。因此推荐大家从Jmeter的官方文档开始学习…...