SQL SERVER存储过程

什么是存储过程

SQL 存储过程(Stored Procedure)是一个在数据库中预编译并存储的一组 SQL 语句。它们可以包含查询、插入、更新、删除等数据库操作,甚至包括控制流语句(如条件判断、循环等)。存储过程可以通过调用来执行,而不需要每次都重新编写和执行 SQL 语句。

分类

  1. 系统存储过程
    是再master数据库中,其他数据库可以直接使用系统存储过程
    再新的数据库中会自动创建
    调用时,不需要加数据库名称

  2. 自定义存储过程
    开发者自己创建的
    可以传参 也可以有返回值
    怎么标明存储过程是否执行成功
    print 日志 查看日志即可
    存储过程内部可以写什么?
    一个或者多个操作
    存储过程与表之间的关系是什么?
    存储过程依赖表的存在,如果存储中依赖的表删除了,那么存储过程也就失效了
    关系:操作与被操作的关系
    执行:exec/execute 存储过程名参数列表(多个参数,用逗号分割)
    存储过程的优缺点是什么?
    优点:提高了程序的可复用性,减少脚本冗余
    提高了管理数据库的效率
    提高了执行sql的熟读
    减轻了服务器的负担
    缺点:需要专门维护,占用数据库空间,

存储过程的优点:

性能提升:

存储过程是在数据库中编译并优化过的,因此执行时可以比单独的 SQL 查询更高效。因为在执行时,SQL
语句已经预编译,避免了重复解析和优化的开销。

重用性:

存储过程是可重用的,可以通过调用存储过程多次执行相同的操作,而无需重复编写相同的 SQL 语句。

封装性:

存储过程将数据库逻辑封装起来,使得应用程序与数据库操作解耦,减少了应用程序和数据库之间的依赖。

安全性:

通过限制应用程序对数据库表的直接访问,存储过程可以提供更好的安全性。用户只需要权限调用存储过程,而无需直接访问底层数据表。

事务管理:

存储过程支持事务管理,可以确保一组操作要么全部成功,要么全部失败(原子性)。这使得数据的一致性得到了保障。

定义存储过程 名称:建议以为 Proc开头

create proc Proc_gen_orderNo
as 
begin -- {
-- 这里编写执行逻辑
print '开始执行...'
select * from BookInfos
select * from BookShellInfos
print '存储过程执行完毕'
end --}
---- bug: 如果 存储过程已经存在,执行新建报错触发存储过程
exec Proc_gen_orderNo

练习:

完成自动生成订单编号的逻辑:
订单编号:2025062600001 202506260002 202506260003
前8位:插入数据的日期
后5位:订单编号的流水号码

思考问题:

如果获取当前时间编号?

select convert(varchar(255),getDate(),112) -- 20250626

如何查询最后一条记录的编号?
方式一:

declare @lastNo varchar(255) 
select  @lastNo=orderNo from orderTable

问题:数据只有几百条,没有影响,
假如每天都产生上万个订单,如果查全部,查询的时间,一天比一天慢
优化:查询今天的数据,倒序排序,在查第一条,== 今天最后一个点单
方式二:

select top 1 @lastNo=orderNo from orderTable where substring(orderNo,1,8) = @ starTimespan
order by orderId desc;

如何生成新的编号
新编号

 set @No = @starTimespan + '00001'

编号已经存在,怎么验证编号已经存在,如何再已存在编号基础上进行生成

create proc Proc_gen_orderNo 
as 
begin-- 1:声明完成整个过程需要的变量declare @No  varchar(255)   -- 执行后,生成的编号declare @starTimespan  varchar(255) -- 当前时间,时间编号declare @lastNo varchar(255)  -- 最后一条记录的订单编号-- 2:给变量初始化赋值set @starTimespan = convert(varchar(255),getDate(),112) -- 时间编号-- 找到最后一条记录的编号select top 1 @lastNo=orderNo from orderTablewhere substring(orderNo,1,8) = @starTimespan order by orderId desc -- 3:生成新的编号-- 3.1 如果最后一条记录不存在if @lastNo is nullbeginset @No = @starTimespan + '00001'insert into orderTable(orderNo) values(@No)print '第一个订单已产生' endelse  begin -- 存在最后一条记录print '今天已经有了订单'declare @lastNo_ int  -- 当前生成记录的尾号declare @tmpNo varchar(255)  -- 编号尾号字符串类型declare @tmpLen int;  -- 字符尾号的长度declare @n int -- 循环次数set @n = 0;  --设置循环次初始值print  substring(@lastNo,9,5)-- 求当前订单,流水的序号set @lastNo_ = convert(int, substring(@lastNo,9,5)) +1 print @lastNo_-- 将流水序号,转化为字符串类型set @tmpNo = convert(varchar(10),@lastNo_)-- 当前字符流水的长度。set @tmpLen = len(@tmpNo)print @tmpLen-- 求流水号前面拼接几个0,流水号总长度为5.while(@n<5-@tmpLen)beginSET @tmpNo = '0' + @tmpNoset @n +=1end-- 生成新的编号set @No = @starTimespan + @tmpNoprint @No-- 插入数据insert into orderTable(orderNo) values(@No)endend
-- 1:执行新建 存储过程
-- 2:触发存储过程。exec Proc_gen_orderNo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86361.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lombok注解 - 提高Java开发效率

01 繁琐编码 初入 Java 开发领域时&#xff0c;编写实体类的琐碎经历想必各位都深有感触。 每当创建一个实体类&#xff0c;铺天盖地的 getter、setter、toString 方法接踵而至&#xff0c;手指在键盘上频繁敲击&#xff0c;酸痛不已。 而 Lombok 这一神器的出现&#xff0c…

Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示

修改uboot延时 首先查找defconfig文件 ./build.sh uboot #通过编译日志查看使用的defconfig文件ls u-boot/configs/*3568* #在SDK根目录下执行该操作 如图标注处就是所使用的u-boot配置文件。 然后修改延时数&#xff1a; vim u-boot/configs/rk3568_defconfig 将CONFIG_BOO…

dockers virbox 安装

sudo apt remove docker docker-engine docker.io containerd runc 更新包索引并安装依赖 sudo apt update sudo apt install ca-certificates curl gnupg 添加Docker官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux…

Restormer: Efficient Transformer for High-Resolution Image Restoration 论文阅读

题目 (Title): Restormer&#xff1a;用于高分辨率图像恢复的高效Transformer 摘要 (Abstract): 由于卷积神经网络&#xff08;CNN&#xff09;在从大规模数据中学习可泛化的图像先验方面表现出色&#xff0c;这些模型已被广泛应用于图像恢复及相关任务。最近&#xff0c;另一…

音视频开发协议栈全景解析

音视频开发协议栈全景解析 引言&#xff1a;协议栈的重要性与演进 在当今数字化时代&#xff0c;音视频技术已成为互联网基础设施的核心组成部分。从视频会议、直播到智能安防、元宇宙应用&#xff0c;音视频协议栈的设计直接影响着用户体验质量(QoE)。作为开发者&#xff0c…

Java面试题025:一文深入了解数据库Redis(1)

欢迎大家关注我的JAVA面试题专栏,该专栏会持续更新,从原理角度覆盖Java知识体系的方方面面。 一文吃透JAVA知识体系(面试题)https://bl

Python:调用json.dumps处理datetime对象数据

文章目录 前言一、查询SQL语句中数据转换1、思路2、示例3、常用格式化模式4、注意事项 二、自定义JSONEncoder处理1、思路2、示例3、使用方法 写在结尾 前言 使用Python开发查询PostgreSQL数据库&#xff0c;返回数据中有timestamp类型数据字段。如果使用json.dumps转换成json对…

QT6 源(130)视图模型架构中的字符串列表模型 QStringListModel:成员函数,本类的继承关系图以及源码注释

&#xff08;1&#xff09;字符串列表型的 model &#xff0c;可以交给视图 view 来显示&#xff0c;也可以由组合框 comboBox 读取其中的内容 &#xff1a; &#xff08;2&#xff09;以下开始学习本字符串 model 里的成员函数&#xff0c;本类没有再定义信号与槽函数 &#x…

dockerfile命令及构建+docker-compose安装构建

一&#xff0c;dockerfile常用命令 命令介绍FROM–指定基础镜像LABEL作者信息USER切换运行属主身份WORKDUR切换工作目录ENV用于docker容器设置环境变量RUN用来执行命令行的命令COPY把宿主机文件复制到镜像中去ADD将文件路径复制添加到容器内部路径EXPOSE为容器打开指定要监听的…

数学:逆元,同余

逆元&#xff0c;同余 0.引言1.同余1.1 同余的基本性质1.2 解同余线性方程 2.逆元费马小定理求逆元(m必需为质数&#xff09;扩展欧几里得求逆元&#xff08;使用任意互质的a和m&#xff09; 0.引言 本文讲述什么是逆元&#xff0c;如何求逆元。求逆元的两种常规方法。然后知道…

广州华锐互动:技术与创意双驱动的 VR 先锋​

广州华锐互动能够在众多 VR 公司中崭露头角&#xff0c;离不开其强大的技术实力和源源不断的创意灵感 。在技术研发方面&#xff0c;广州华锐互动组建了一支专业的技术团队&#xff0c;团队成员均具备扎实的技术功底和丰富的行业经验&#xff0c;他们专注于 VR、AR、3D 等核心技…

教育培训教学通用PPT模版

教育培训通用PPT模版&#xff0c;儿童教育PPT模版&#xff0c;公开课件教学PPT模版&#xff0c;读书笔记PPT模版&#xff0c;古风PPT模版&#xff0c;教育教学通用PPT模版 教育培训教学通用PPT模版&#xff1a;https://pan.quark.cn/s/6c2ed020e398

Data Vault 初探(五) —— 定期装载_SQL

说明&#xff1a; 1. 定期装载的周期为每天一次。 2. 每天装载自上次装载后的变化数据 3. 建立源数据库的过渡表用于CDC 4. 建立cdc_time表用于基于时间戳的CDC 5. 因为源库上只有订单销售表有时间属性&#xff0c;所以除了sales_order和sales_order_item拉取变化数据外&#x…

Java虚拟机栈(JVM Stack)详解与工作流程分析

Java虚拟机栈&#xff08;JVM Stack&#xff09;详解与工作流程分析 1. 虚拟机栈核心概念 基本特性 线程私有&#xff1a;每个线程在创建时都会分配一个独立的栈存储内容&#xff1a; 栈帧&#xff08;Stack Frame&#xff09;&#xff1a;每个方法调用对应一个栈帧 生命周期…

Sonarqube:Jenkins触发sonar扫描出现UnsupportedClassVersionError错误处理

文章目录 1、问题现象2、问题根因3、解决思路3.1 解决思路13.2 解决思路23.3 解决思路3 1、问题现象 问题现象&#xff1a;在每次Jenkins触发sonar扫描时&#xff0c;Sonar-scanner扫描器执行都会出现UnsupportedClassVersionError异常&#xff0c;如下&#xff1a; ERROR: …

Spark SQL to_json 函数介绍

目录 前言函数介绍参数说明示例 前言 在Apache Hive中&#xff0c;并没有内置的to_json函数。在Apache Spark SQL中确实有to_json函数,它可以用来将结构化数据&#xff08;如结构化类型或MAP类型&#xff09;转换为JSON字符串。这个功能对于需要将表格数据输出为JSON格式的场景…

《解锁前端潜力:自动化流程搭建秘籍》

当项目逐渐从萌芽走向繁茂&#xff0c;中期阶段对流程优化与效率提升的需求便愈发迫切。搭建一套自动化测试、持续集成与部署的完整流程&#xff0c;已然成为突破瓶颈、保障代码质量与上线效率的关键密钥。这不仅是技术的进阶&#xff0c;更是思维与协作模式的革新。在踏上构建…

计算机体系结构中的片上系统SoC是什么?

计算机体系结构中的片上系统SoC是什么&#xff1f; 片上系统&#xff08;SoC&#xff0c;System on Chip&#xff09; 是一种将计算机或其他电子系统的多个关键组件集成到单一芯片上的集成电路设计。它不仅仅是处理器&#xff08;CPU&#xff09;&#xff0c;而是将处理器、内…

linux虚拟机基础-磁盘扩容详细版本模拟实验

扩容实验参考上一篇博客&#xff1a; https://blog.csdn.net/wenxiaocsdn/article/details/141932877?spm1001.2014.3001.5502 LVM基础知识附录红帽官方文档 配置和管理逻辑卷 | Red Hat Enterprise Linux | 8 | Red Hat Documentation LVM逻辑结构图 LVM 管理命令速查表&…

hbase高可用部署

要实现HBase集群的高可用部署&#xff08;High Availability, HA&#xff09;&#xff0c;核心在于消除单点故障&#xff08;特别是HMaster节点&#xff09;&#xff0c;并确保数据冗余和服务自动恢复。以下是、关键步骤和配置要点&#xff1a; 一、核心配置步骤‌ ‌1.1 启用…