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

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...