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

SQLServer中的存储过程与事务

一、存储过程的概念

1. 定义

存储过程(Stored Procedure)是一组预编译的 SQL 语句的集合,它们被存储在数据库中,可以通过指定存储过程的名称并执行来调用它们。存储过程可以接受输入参数、输出参数,并且可以返回执行结果。

2. 优点 
  • 性能提升:存储过程在创建时会被编译,之后调用时直接执行预编译的代码,减少了编译时间。

  • 减少网络流量:客户端只需发送存储过程的名称和参数,减少了网络传输的数据量。

  • 代码复用:存储过程可以被多个应用程序重复调用,提高了代码的复用性。

  • 安全性:通过存储过程可以限制用户对某些表或数据的直接访问,提高了数据的安全性。

  • 事务管理:存储过程可以封装复杂的业务逻辑,包括事务的提交和回滚,确保数据的一致性。

3. 创建存储过程 
USE [数据库名];
GO
CREATE PROCEDURE [架构名].[存储过程名]@参数1 数据类型 = 默认值,@参数2 数据类型 OUTPUT -- 表示输出参数
AS
BEGINSET NOCOUNT ON; -- 防止返回结果集中的行计数-- SQL 语句SELECT * FROM 表名 WHERE 条件;-- 如果有输出参数,为输出参数赋值SET @参数2 = 值;-- 返回状态RETURN 0;
END
GO
4. 调用存储过程

不带参数

EXEC [架构名].[存储过程名];

带输入参数

EXEC [架构名].[存储过程名] @参数1 = 值;

带输出参数

DECLARE @输出参数 数据类型;
EXEC [架构名].[存储过程名] @参数1 = 值, @参数2 = @输出参数 OUTPUT;
SELECT @输出参数;

二、事务的概念

1. 定义

事务(Transaction)是一组操作的集合,这些操作要么全部成功,要么全部失败。事务是一个不可分割的工作单位,它确保了数据的完整性和一致性。

2. ACID 特性
  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会停留在中间状态。

  • 一致性(Consistency):事务执行前后,数据库都必须保持一致性状态。

  • 隔离性(Isolation):并发执行的事务之间不能互相干扰,一个事务的执行不能被其他事务干扰。

  • 持久性(Durability):一旦事务提交,其对数据库的更改将永久保存,即使系统发生故障也是如此。

3. 事务的语句 
  • BEGIN TRANSACTION:开始一个事务。

  • COMMIT TRANSACTION:提交事务,使所有操作永久生效。

  • ROLLBACK TRANSACTION:回滚事务,撤销所有操作。

已完成推理

详细解释SQL Server存储过程和事务

现在,我需要详细分析用户想要学习 SQL Server 存储过程和事务的意图。用户表示要将这些内容做笔记并教给别人,这就要求我的解释必须全面、详细,并且示例要清晰易懂。

首先,我得从存储过程的基本概念入手。我回忆起存储过程是 SQL Server 中用于存储一组预编译的 SQL 语句的集合,就像是一个代码包,能被反复调用。我得把这个核心概念用简单直白的语言描述出来,让用户能快速抓住重点。

接着,我思考存储过程的优点,这能帮助用户理解为什么我们要使用存储过程。我想到代码复用、性能提升、安全性增强、减少网络流量这几个关键点,这些都是存储过程带来的实实在在的好处,我得把这些优点一一列举出来,让用户明白其价值。

然后,我得讲解存储过程的创建和执行方式。我回忆起创建存储过程的语法,包括基本语法、带输入参数和带输出参数的语法。我决定用具体示例展示每一种情况,这样用户可以更直观地看到如何将理论应用到实践中。

随后,我转向事务的部分。我深知事务是数据库操作的重要组成部分,它能保证数据的一致性和完整性。我得先解释事务的概念,再说明它的四个关键特性:原子性、一致性、隔离性、持久性。

接下来,我考虑如何解释事务的隔离级别。我得详细描述每个隔离级别,比如未提交读、已提交读、可重复读、串行化,以及它们如何影响事务间的交互。同时,我得提供设置事务隔离级别的语法示例,让用户能亲自实践。

最后,我得给出完整的示例,展示如何在存储过程中使用事务。这包括事务的开始、提交、回滚的示例,让用户能清晰理解事务的使用流程。

在构思回答的过程中,我始终关注如何让内容更易于理解和记忆。我避免使用过于复杂的术语,而是用通俗易懂的语言来解释。我还考虑如何将这些内容组织成易于阅读的结构,方便用户做笔记。

现在,我认为我已经充分准备好了,可以开始以一种逻辑清晰、易于理解的方式给用户一个详细的解释,包含全面的概念、优点、语法、示例等,帮助用户掌握 SQL Server 的存储过程和事务。

好的,下面我将详细描述 SQL Server 数据库中存储过程的概念、用法以及事务的相关知识,方便你做笔记和教导他人。

一、存储过程的概念

1. 定义

存储过程(Stored Procedure)是一组预编译的 SQL 语句的集合,它们被存储在数据库中,可以通过指定存储过程的名称并执行来调用它们。存储过程可以接受输入参数、输出参数,并且可以返回执行结果。

2. 优点
  • 性能提升:存储过程在创建时会被编译,之后调用时直接执行预编译的代码,减少了编译时间。

  • 减少网络流量:客户端只需发送存储过程的名称和参数,减少了网络传输的数据量。

  • 代码复用:存储过程可以被多个应用程序重复调用,提高了代码的复用性。

  • 安全性:通过存储过程可以限制用户对某些表或数据的直接访问,提高了数据的安全性。

  • 事务管理:存储过程可以封装复杂的业务逻辑,包括事务的提交和回滚,确保数据的一致性。

3. 创建存储过程

sql

复制

USE [数据库名];
GO
CREATE PROCEDURE [架构名].[存储过程名]@参数1 数据类型 = 默认值,@参数2 数据类型 OUTPUT -- 表示输出参数
AS
BEGINSET NOCOUNT ON; -- 防止返回结果集中的行计数-- SQL 语句SELECT * FROM 表名 WHERE 条件;-- 如果有输出参数,为输出参数赋值SET @参数2 = 值;-- 返回状态RETURN 0;
END
GO
4. 调用存储过程
  • 不带参数

    sql

    复制

    EXEC [架构名].[存储过程名];
  • 带输入参数

    sql

    复制

    EXEC [架构名].[存储过程名] @参数1 = 值;
  • 带输出参数

    sql

    复制

    DECLARE @输出参数 数据类型;
    EXEC [架构名].[存储过程名] @参数1 = 值, @参数2 = @输出参数 OUTPUT;
    SELECT @输出参数;

二、事务的概念

1. 定义

事务(Transaction)是一组操作的集合,这些操作要么全部成功,要么全部失败。事务是一个不可分割的工作单位,它确保了数据的完整性和一致性。

2. ACID 特性
  • 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会停留在中间状态。

  • 一致性(Consistency):事务执行前后,数据库都必须保持一致性状态。

  • 隔离性(Isolation):并发执行的事务之间不能互相干扰,一个事务的执行不能被其他事务干扰。

  • 持久性(Durability):一旦事务提交,其对数据库的更改将永久保存,即使系统发生故障也是如此。

3. 事务的语句
  • BEGIN TRANSACTION:开始一个事务。

  • COMMIT TRANSACTION:提交事务,使所有操作永久生效。

  • ROLLBACK TRANSACTION:回滚事务,撤销所有操作。

4. 事务隔离级别

 事务隔离级别控制事务之间的相互影响程度,SQL Server 提供了以下隔离级别:

  • READ UNCOMMITTED:允许脏读,事务可以读取其他事务未提交的数据。

  • READ COMMITTED:只允许读取已提交的数据,默认隔离级别。

  • REPEATABLE READ:可重复读,确保在事务中多次读取同一数据时结果一致。

  • SERIALIZABLE:可串行化,最高隔离级别,事务之间完全隔离。

三、存储过程与事务结合示例 

USE OEM;
GO-- 创建存储过程
CREATE PROCEDURE [dbo].[TransferFunds]@FromAccount INT,@ToAccount INT,@Amount DECIMAL(18, 2)
AS
BEGINSET NOCOUNT ON;-- 声明变量DECLARE @FromBalance DECIMAL(18, 2);DECLARE @ToBalance DECIMAL(18, 2);DECLARE @Result INT;-- 设置事务隔离级别SET TRANSACTION ISOLATION LEVEL READ COMMITTED;-- 开始事务BEGIN TRYBEGIN TRANSACTION;-- 检查源账户余额SELECT @FromBalance = Balance FROM Accounts WHERE AccountID = @FromAccount;IF @FromBalance < @AmountBEGINSET @Result = -1; -- 余额不足THROW 50001, '源账户余额不足', 1;END-- 扣除源账户金额UPDATE Accounts SET Balance = Balance - @Amount WHERE AccountID = @FromAccount;-- 增加目标账户金额UPDATE Accounts SET Balance = Balance + @Amount WHERE AccountID = @ToAccount;-- 提交事务COMMIT TRANSACTION;SET @Result = 0; -- 成功END TRYBEGIN CATCH-- 回滚事务IF @@TRANCOUNT > 0BEGINROLLBACK TRANSACTION;END-- 捕获错误信息DECLARE @ErrorMessage NVARCHAR(4000);DECLARE @ErrorSeverity INT;DECLARE @ErrorState INT;SELECT @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();-- 返回错误信息RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);SET @Result = -2; -- 事务失败END CATCH-- 返回结果RETURN @Result;
END
GO
示例说明
  1. 事务隔离级别:设置为 READ COMMITTED,确保只读取已提交的数据。

  2. 错误处理:使用 TRY...CATCH 块捕获错误,并在发生错误时回滚事务。

  3. 结果返回:通过返回值和 RAISERROR 提供错误信息。

相关文章:

SQLServer中的存储过程与事务

一、存储过程的概念 1. 定义 存储过程&#xff08;Stored Procedure&#xff09;是一组预编译的 SQL 语句的集合&#xff0c;它们被存储在数据库中&#xff0c;可以通过指定存储过程的名称并执行来调用它们。存储过程可以接受输入参数、输出参数&#xff0c;并且可以返回执行…...

STM32H562----------ADC外设详解

1、ADC 简介 STM32H5xx 系列有 2 个 ADC,都可以独立工作,其中 ADC1 和 ADC2 还可以组成双模式(提高采样率)。每个 ADC 最多可以有 20 个复用通道。这些 ADC 外设与 AHB 总线相连。 STM32H5xx 的 ADC 模块主要有如下几个特性: 1、可配置 12 位、10 位、8 位、6 位分辨率,…...

uniapp 安卓 APP 后台持续运行(保活)的尝试办法

在移动应用开发领域&#xff0c;安卓系统的后台管理机制较为复杂&#xff0c;应用在后台容易被系统回收&#xff0c;导致无法持续运行。对于使用 Uniapp 开发的安卓 APP 来说&#xff0c;实现后台持续运行&#xff08;保活&#xff09;是很多开发者面临的重要需求&#xff0c;比…...

AI大数据模型如何与thingsboard物联网结合

一、 AI大数据与ThingsBoard物联网的结合可以从以下几个方面实现&#xff1a; 1. 数据采集与集成 设备接入&#xff1a;ThingsBoard支持多种通信协议&#xff08;如MQTT、CoAP、HTTP、Modbus、OPC-UA等&#xff09;&#xff0c;可以方便地接入各种物联网设备。通过这些协议&am…...

【SSM】SpringBoot笔记2:整合Junit、MyBatis

前言&#xff1a; 文章是系列学习笔记第9篇。基于黑马程序员课程完成&#xff0c;是笔者的学习笔记与心得总结&#xff0c;供自己和他人参考。笔记大部分是对黑马视频的归纳&#xff0c;少部分自己的理解&#xff0c;微量ai解释的内容&#xff08;ai部分会标出&#xff09;。 …...

STM32——CAN总线

STM32——CAN总线 1. CAN总线基础概念 1.1 CAN总线简介 控制器局域网&#xff08;Controller Area Network, CAN&#xff09;是由Bosch公司开发的串行通信协议&#xff0c;专为汽车电子和工业控制设计&#xff0c;具有以下核心特性&#xff1a; 多主控制架构&#xff1a;所有…...

嵌入式面试高频!!!C语言(四)(嵌入式八股文,嵌入式面经)

更多嵌入式面试文章见下面连接&#xff0c;会不断更新哦&#xff01;&#xff01;关注一下谢谢&#xff01;&#xff01;&#xff01;&#xff01; ​​​​​​​https://blog.csdn.net/qq_61574541/category_12976911.html?fromshareblogcolumn&sharetypeblogcolumn&…...

数据治理在制造业的实践案例

一、数据治理在制造业的重要性 随着工业4.0的到来,制造业正经历着前所未有的变革。数据治理作为制造业数字化转型的关键组成部分,对提升企业竞争力、优化生产流程、提高产品质量和客户满意度等方面起着至关重要的作用。在制造业中,数据治理不仅涉及到数据的收集、存…...

【强化学习】——03 Model-Free RL之基于价值的强化学习

【强化学习】——03 Model-Free RL之基于价值的强化学习 \quad\quad \quad\quad 动态规划算法是基于模型的算法,要求已知状态转移概率和奖励函数。但很多实际问题中环境 可能是未知的,这就需要不基于模型(Model-Free)的RL方法。 \quad\quad 其又分为: 基于价值(Valu…...

Edge(Bing)自动领积分脚本部署——基于python和Selenium(附源码)

微软的 Microsoft Rewards 计划可以通过 Bing 搜索赚取积分&#xff0c;积分可以兑换礼品卡、游戏等。每天的搜索任务不多&#xff0c;我们可以用脚本自动完成&#xff0c;提高效率&#xff0c;解放双手。 本文将手把手教你如何部署一个自动刷积分脚本&#xff0c;并解释其背…...

html表格转换为markdown

文章目录 工具功能亮点1.核心实现解析1. 剪贴板交互2. HTML检测与提取3. 转换规则设计 2. 完整代码 在日常工作中&#xff0c;我们经常遇到需要将网页表格快速转换为Markdown格式的场景。无论是文档编写、知识整理还是数据迁移&#xff0c;手动转换既耗时又容易出错。本文将介绍…...

VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)

当前时间为 25/6/3&#xff0c;Cline 版本为 3.17.8 点击侧边栏的“扩展”图标 在搜索框中输入“Cline” 找到 Cline 插件&#xff0c;然后点击“安装” 安装完成后&#xff0c;Cline 图标会出现在 VS Code 的侧边栏中 点击 Use your own API key API Provider 选择 OpenRouter…...

短视频矩阵系统源码新发布技术方案有那几种?

短视频矩阵运营在平台政策频繁更迭的浪潮中&#xff0c;已成为内容分发的核心战场。行业领先者如筷子科技、云罗抖去推、超级编导等平台&#xff0c;其稳定高效的代发能力背后&#xff0c;离不开前沿技术方案的强力支撑。本文将深入剖析当前主流的六大短视频矩阵系统代发解决方…...

React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例

前言 useResolvedPath 是 React Router v6 提供的一个实用钩子&#xff0c;用于解析给定路径为完整路径对象。 它根据当前路由上下文解析相对路径&#xff0c;生成包含 pathname、search 和 hash 的完整路径对象。 一、useResolvedPath 核心用途 路径解析&#xff1a;将相对…...

【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析

你好&#xff0c;欢迎来到本次关于PmHub整合性能监控与分布式追踪利器Skywalking的面试系列分享。在这篇文章中&#xff0c;我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解&#xff0c;强烈推荐参考之前发布的博文&#xff1a;【PmHub后端篇】Skyw…...

Cursor快速梳理ipynb文件Prompt

1. 整体鸟瞰 请在不运行代码的前提下&#xff0c;总结 <文件名.ipynb> 的主要目的、核心逻辑流程和输出结果。阅读整个项目目录&#xff0c;列出每个 .ipynb / .py 文件的角色&#xff0c;以及它们之间的数据依赖关系&#xff08;输入→处理→输出&#xff09;。2. 结构…...

天机学堂-分页查询

需求 分页查询我的课表 返回&#xff1a; 总条数、总页数、当前页的课表信息的集合 返回的VO&#xff08;已经封装成统一的LearningLessonsVO&#xff09; 定义Controller RestController RequestMapping("/lessons") RequiredArgsConstructor public class Lear…...

业态即战场:零售平台的生意模型与系统设计解构

目录 一、当我们在电商买菜、点外卖时,其实是零售业态在进化 (一)从“商场选货”到“算法推货”:零售的时代已经不同 (二)“控货”和“卖场”——零售的两种基本商业模式 二、四种经典零售业态解析:控货 vs 卖场,地面 vs 线上 (一)地面控货零售:直营模式的黄金…...

微算法科技(NASDAQ:MLGO)基于信任的集成共识和灰狼优化(GWO)算法,搭建高信任水平的区块链网络

随着数字化转型的加速&#xff0c;区块链技术作为去中心化、透明且不可篡改的数据存储与交换平台&#xff0c;正逐步渗透到金融、供应链管理、物联网等多个领域&#xff0c;探索基于信任的集成共识机制&#xff0c;并结合先进的优化算法来提升区块链网络的信任水平&#xff0c;…...

全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验

我们整合了专业人士喜爱的 Xsens 动捕功能&#xff0c;并使其更加完善。全新Xsens Animate版本是我们迄今为止最大的软件升级&#xff0c;旨在提供更清晰的数据、更快捷的工作流程以及从录制开始就更直观的体验。 从制作游戏动画到流媒体直播头像或构建实时电影内容&#xff0…...

大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略

文章目录 一、评测工具链&#xff1a;从手工测试到自动化工程的效率革命&#xff08;一&#xff09;OpenCompass&#xff1a;开源评测框架的生态构建1. 技术架构&#xff1a;三层架构实现评测自动化2. 开发者赋能&#xff1a;从入门到进阶的工具矩阵 &#xff08;二&#xff09…...

python打卡day46@浙大疏锦行

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 内…...

C++.OpenGL (1/64) 创建窗口(Hello Window)

OpenGL 创建窗口(Hello Window) 步骤详解与代码实现 #mermaid-svg-436DlGvysFQogISc {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-436DlGvysFQogISc .error-icon{fill:#552222;}#mermaid-svg-436DlGvysFQogISc…...

Excel 发现此工作表中有一处或多处公式引用错误。请检查公式中的单元格引用、区域名称、已定义名称以及到其他工作簿的链接是否均正确无误。弹窗

Excel 提示“发现此工作表中有一处或多处公式引用错误”通常表示公式中存在无效引用。以下是系统化的检查步骤&#xff0c;帮助你定位和修复问题&#xff1a; 1. 检查单元格引用&#xff1a; 无效单元格引用&#xff1a;检查公式中的单元格地址&#xff08;如 A1、B10&…...

NVIDIA DRIVE AGX平台:引领智能驾驶安全新时代

随着科技的不断进步&#xff0c;汽车行业正迎来前所未有的变革&#xff0c;智能驾驶技术成为全球产业竞相布局的焦点之一。然而&#xff0c;这场技术革命的背后&#xff0c;最关键且被广泛关注的是安全性问题。近日&#xff0c;我认真研读了NVIDIA发布的《自动驾驶安全报告》白…...

推荐12个wordpress企业网站模板

WordPress企业网站模板是一种专为企业网站设计的WordPress主题&#xff0c;旨在帮助企业创建专业、美观且易于管理的网站。这些模板通常具备响应式设计、SEO优化、多语言支持等功能&#xff0c;能够满足不同行业和企业的需求。 WordPress企业网站模板的适用场景 企业官网&…...

沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践

荆州市沙市区&#xff0c;2025年6月5日—— 在沙市区政府主办的“发挥区域性股权市场功能&#xff0c;助力企业拥抱资本市场”专题培训会上&#xff0c;区委副书记、区长郭熙胜强调要充分发挥资本市场服务实体经济功能&#xff0c;推动本土创新企业高质量发展。区内重点企业点赋…...

Docker 容器化基础:镜像、容器与仓库的本质解析

Docker 概念与容器化技术 Docker 是一种容器化平台&#xff0c;能够将应用程序及其依赖项打包成一个容器&#xff0c;确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化&#xff0c;为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...

九.C++ 对引用的学习

一.基本概念 引用即内存的别名 int a 10; int& b a; 引用本身不占用内存&#xff0c;并非实体&#xff0c;对引用的所有操作都是在对目标内存进行操作 引用必须初始化&#xff0c;且不能更换对象 int c 5; b c; // 仅仅是在对引用的目标内存进行赋值 #include <ios…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面

在开发鸿蒙应用时&#xff0c;你是否也曾为一个页面的布局反复调整&#xff1f;是否还在为查 API、写模板代码而浪费大量时间&#xff1f;今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie&#xff08;代码精灵&#xff09; &#xff0c;如何从 0 到 1 快速构建一个…...