【Sql Server】存储过程的创建和使用事务,常见运用场景,以及目前现状

欢迎来到《小5讲堂》,大家好,我是全栈小5。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • 创建存储过程
    • 创建格式
    • 返回数据集
    • 使用事务
    • 修改存储过程
    • 输出异常信息
    • 正确代码
  • 常见场景
  • 目前现状
  • 文章推荐

前言

上周有个小伙伴留言,让博主写一篇存储过程的知识点文章,
刚好趁此机会简单总结下存储过程,以及它的运用场景和现状。
存储过程可以写的很简答,也可以写的很复杂,看实际业务场景。

创建存储过程

创建格式

CREATE PROCEDURE procedure_name@parameter1 data_type1 = default_value1,@parameter2 data_type2 = default_value2,...
AS
BEGIN-- 存储过程的逻辑代码
END

存储过程的主要结构包含以下几个部分:
1.存储过程名称(procedure_name)
用于标识存储过程的唯一名称。

2.输入参数(@parameter1, @parameter2, …)
可选的输入参数,用于接收外部传入的值。每个参数包括参数名、数据类型和默认值(可选)。

3.存储过程逻辑
在 BEGIN 和 END 之间编写存储过程的实际逻辑代码,可以包括各种 SQL 查询、更新、插入、删除等操作。

返回数据集

创建一个存储过程,用于返回一个查询数据集,基于之前文章创建过的表进行查询,具体可以在文章底部跳转链接查询。
这里的存储过程关键词procedure,可以缩写成proc。使用execute关键词执行创建好的存储过程以及传参

-- 创建存储过程
create proc my_query_proc@agent_name nvarchar(50)
as
beginselect * from test_name where agent_name=@agent_name
end-- 执行存储过程
declare @agent_name3 nvarchar(50)
set @agent_name3='''张三'''
execute my_query_proc @agent_name3

在这里插入图片描述

使用事务

通过传递值,在存储过程中执行操作,添加记录并且使用事务功能,事务关键词transaction,同样可以进行简写为tran。
下面存储过程代码,直接给自增id赋值是会报错,从而导致事务回滚。

-- 使用事务
create proc my_tran_proc@agent_name5 nvarchar(50)
as
beginbegin transaction; -- 开始事务begin tryinsert into test_name(id,city_name,area_name,agent_name)values(1,'深圳市','龙岗区',@agent_name5)end trybegin catchrollback transaction; -- 回滚事务end catchselect * from test_name where agent_name=@agent_name5
end-- 执行存储过程
declare @agent_name6 nvarchar(50)
set @agent_name6='''张三'''
execute my_tran_proc @agent_name6

在上面语句存在了报错情况,但是没有输出异常信息,如果添加成功,那么是会返回两条记录
在这里插入图片描述

修改存储过程

修改存储过程也很简答,通过可视化界面直接找到,在里面修改
在这里插入图片描述
在这里插入图片描述

输出异常信息

通过上一步修改存储过程后,再执行存储过程,切换到消息即可查看到输出的错误信息在这里插入图片描述

正确代码

-- 使用事务
alter proc my_tran_proc@agent_name5 nvarchar(50)
as
beginbegin transaction; -- 开始事务begin tryinsert into test_name(city_name,area_name,agent_name)values('深圳市','龙岗区',@agent_name5)end trybegin catchrollback transaction; -- 回滚事务declare @errorMessage nvarchar(4000) = error_message();print(@errorMessage)end catchselect * from test_name where agent_name=@agent_name5
end-- 执行存储过程
declare @agent_name6 nvarchar(50)
set @agent_name6='''张三'''
execute my_tran_proc @agent_name6

在这里插入图片描述

常见场景

SQL Server 存储过程的运用场景很多,

主要可分为以下几类:
1.执行复杂的数据处理操作
当需要进行复杂的数据处理时,可能需要多次查询、更新、插入、删除等操作。将这些操作封装在一个存储过程中可以简化代码的编写,提高效率,并且可以重复使用相同的代码逻辑。

2.提高数据库性能
存储过程可以被预编译,并且可以缓存执行计划,这样可以降低数据库服务器的负载并提高查询的执行效率。

3.简化应用程序代码
通过调用存储过程,应用程序可以将逻辑转移至数据库端,简化代码,提高效率,并且可以更容易地对数据库进行管理和维护。

4.加强数据安全性
存储过程可以设置权限控制,限制对数据库的访问权限,确保敏感数据的安全性,防止非法的操作。

5.实现事务操作
对于需要实现事务的数据库操作,可以使用存储过程来组织多个操作,确保事务的原子性。

总之,SQL Server 存储过程是一种强大而灵活的工具,可以用于解决各种不同的数据库需求,提高应用程序的效率和安全性。

目前现状

现在越来越多的公司在实际应用中减少了对存储过程的大量使用。博主在接触到的公司也确实是如此,也看实际业务情况。

这种趋势的主要原因包括:
1.ORM(对象关系映射)框架的普及和成熟
ORM框架(如Entity Framework、Hibernate等)的发展使得应用程序更倾向于采用对象关系映射的方式来处理数据操作,而不是直接使用存储过程。ORM框架可以将数据库表映射为对象,简化了数据访问层的开发和维护。

2.API 和微服务架构的兴起
随着微服务架构的流行,越来越多的公司将业务逻辑封装在独立的 API 中,而不是通过存储过程来实现。API 提供了更灵活的方式来访问和处理数据,同时也更易于扩展和维护。

3.更多的业务逻辑移到应用层
随着业务需求的不断变化,很多公司倾向于将更多的业务逻辑放在应用层实现,而不是存储过程中。这样可以更容易地控制和修改业务逻辑,也减少了对数据库的依赖。

尽管如此,存储过程仍然在某些特定场景下发挥着重要作用,比如处理复杂的数据逻辑、实现事务控制、提高数据库性能等。
因此,并不是所有的公司都完全弃用存储过程,而是根据具体的需求和情况决定是否使用存储过程。

文章推荐

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

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

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

相关文章

即插即用篇 | YOLOv8 引入 ParNetAttention 注意力机制 | 《NON-DEEP NETWORKS》

论文名称:《NON-DEEP NETWORKS》 论文地址:https://arxiv.org/pdf/2110.07641.pdf 代码地址:https://github.com/imankgoyal/NonDeepNetworks 文章目录 1 原理2 源代码3 添加方式4 模型 yaml 文件template-backbone.yamltemplate-small.yamltemplate-large.yaml

DEAP:利用生理信号进行情绪分析的数据库【DEAP数据集】

文章目录 摘要引言刺激选择实验环境参与者步骤参与者自我评估 主观评价分析EEG频率与参与者评分之间的相关性单次试验分类结果 结论 点击下载原文 摘要 ● DEAP:用于分析人类情感状态的多模态数据集。 ● 32名参与者观看了40个一分钟长的音乐视频。 ● 参与者根据唤…

C++ 标准库类型string

C/C总述:Study C/C-CSDN博客 目录 定义和初始化string对象 string的增 使用push_back进行尾插 使用insert插入 使用append函数完成string的拼接 string的删 使用pop_back进行尾删 使用erase删除 string的查 使用find函数正向搜索第一个匹配项 使用rf…

登录校验认证

会话技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪: 一种维护浏览器状态的方法,服务器需要识别多次请…

position定位学习

加了绝对定位的盒子不能通过margin:0 auto水平居中 脱标元素不会产生外边距合并问题

树莓派(Raspberry Pi)常见的各种引脚介绍

本文将为您详细讲解树莓派(Raspberry Pi)常见的各种引脚,以及它们的特点、区别和优势。树莓派是一款非常受欢迎的单板计算机,它拥有多个 GPIO(通用输入输出)引脚,这些引脚可以用于各种电子项目和…

Linux mmap系统调用

文章目录 前言一、mmap()函数简介二、代码演示2.1 mmap使用场景2.2 私有匿名映射2.3 私有文件映射2.4 共享匿名映射2.5 共享文件映射 参考 前言 NAMEmmap, munmap - map or unmap files or devices into memorySYNOPSIS#include <sys/mman.h>void *mmap(void *addr, siz…

java 数据结构二叉树

目录 树 树的概念 树的表示形式 二叉树 两种特殊的二叉树 二叉树的性质 二叉树的存储 二叉树的基本操作 二叉树的遍历 二叉树的基本操作 二叉树oj题 树 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次…

Type-C接口PD协议统一:引领电子科技新纪元的优势解析

在电子科技日新月异的今天&#xff0c;充电接口的统一化已经成为了业界的一大趋势。其中&#xff0c;Type-C接口凭借其传输速度快、使用便捷等优点&#xff0c;迅速成为了市场上的主流选择。而PD&#xff08;Power Delivery&#xff09;协议的统一&#xff0c;更是为Type-C接口…

黑马点评-好友关注实现

关注和取关 针对用户的操作&#xff0c;可以对用户进行关注和取消关注功能&#xff1a; 需要实现两个接口&#xff1a; 关注和取关接口 判断是否关注的接口 接口&#xff1a; //关注和取关 PutMapping("/{id}/{isFollow}") public Result follow(PathVariable(&…

Day25:安全开发-PHP应用文件管理模块包含上传遍历写入删除下载安全

目录 PHP文件操作安全 文件包含 文件删除 文件编辑 文件下载 云产品OSS存储对象去存储文件(泄漏安全) 思维导图 PHP知识点 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框…

百度智能云音视频处理产品 MCP 推出数字水印技术,为数字内容资产保驾护航

2023 年 8 月份&#xff0c;全国信息安全标准化技术委员会发布了《网络安全标准实践指南一生成式人工智能服务内容标识方法&#xff08;征求意见稿&#xff09;》&#xff0c;明确提出在AI技术生成图像、音频、视频内容中应添加数字水印标识&#xff0c;以确保内容安全可追溯。…