SQL Server 存储过程 触发器 事务处理

CSDN 成就一亿技术人!

难度指数:* * 

CSDN 成就一亿技术人!


目录

1. 存储过程的作用

创建存储过程

2. 触发器

触发器的种类

insert触发器

update触发器

delete触发器

测试

3. 事务

开始事务

提交事务

回滚事务

举个实例


在 SQL Server 中,存储过程是一种可重复使用的代码段,用于执行特定的任务。存储过程可以接受输入参数并返回输出参数。

1. 存储过程的作用

可用于提高性能、封装业务逻辑、促进代码重用,减少网络流量,提高安全性 防范 SQL 注入攻击,简化复杂查询 减轻客户端的负担

详细见下方:

提高性能: 存储过程通常是预编译的,数据库管理系统在首次执行存储过程时会编译它,然后将编译结果缓存起来。这种预编译和缓存可以提高执行速度,特别是当存储过程被多次调用时。

代码重用: 存储过程允许将常用的 SQL 逻辑封装在一个单一的单元中,从而促进代码重用。多个应用程序或查询可以共享相同的存储过程,减少了代码冗余。

封装业务逻辑: 存储过程允许将复杂的业务逻辑封装在数据库中。这有助于确保逻辑的一致性,减少了在多个应用程序中复制和粘贴相同的业务规则的风险。

减少网络流量: 将逻辑移至数据库中并使用存储过程执行,可以减少传递给数据库服务器的查询量。只需传递存储过程的参数,而不是每次都传递完整的 SQL 语句。

安全性: 存储过程可以对外隐藏底层表的结构,通过授予对存储过程的执行权限而不是对底层表的直接访问权限,可以提高安全性。此外,存储过程还可以通过参数化查询来防范 SQL 注入攻击。

事务控制: 存储过程内的语句可以被包裹在事务中,允许更精细的事务控制。这对于确保一系列操作的一致性和原子性非常有用。

简化复杂查询: 存储过程可以包含复杂的查询和逻辑,使得应用程序代码可以更简单,更易于维护。这对于处理复杂的数据操作和多步骤的业务逻辑非常有帮助。

减轻客户端负担: 存储过程的执行发生在数据库服务器上,而不是在客户端。这可以减轻客户端的负担,特别是在处理大量数据时。

创建存储过程

-- 创建不带参数的存储过程
CREATE PROCEDURE cunchu_name
AS
BEGIN
    SELECT name, age, sex,
    FROM 表;
END;

  • cunchu_name 是这个存储过程的名称。

调用不带参数的存储过程:

EXECUTE cunchu_name; -- 使用 EXECUTE
-- 或者
EXEC cunchu_name; -- 使用 EXEC

-- 创建带参数的存储过程
CREATE PROCEDURE cunchu_name
    @age INT
AS
BEGIN
    SELECT name, age, sex
    FROM
    WHERE age= @age;
END;

  • cunchu_name 是这个存储过程的名称。
  • @age INT 定义一个age变量 类型为int

 调用不带参数的存储过程:

EXECUTE GetEmployeeByID @EmployeeID; -- 使用 EXECUTE
-- 或者
EXEC GetEmployeeByID @EmployeeID; -- 使用 EXEC

2. 触发器

触发器(Trigger)是一种特殊的存储过程,它与表相关联,定义了在表上执行的自动化操作。触发器通常在表上的插入、更新或删除操作发生时触发,允许在数据发生变化时执行一些自定义的逻辑

触发器的种类

insert触发器:当向表中写入数据时触发 自动执行定义的语句

update触发器:当更新列, 自动执行定义的语句

delete触发器:删除某一个信息  自动执行定义的语句

insert触发器

CREATE TRIGGER chufaqi_name
ON  YourTableName
AFTER INSERT
AS
BEGIN
    -- 触发器逻辑
    PRINT '添加信息成功!';
END;

update触发器

CREATE TRIGGER chufaqi_name
ON  YourTableName
AFTER UPDATE
AS
BEGIN
    -- 触发器逻辑
    PRINT '添加信息成功!';
END;

delete触发器

CREATE TRIGGER chufaqi_name
ON  YourTableName
AFTER DELETE
AS
BEGIN
    -- 触发器逻辑
    PRINT '添加信息成功!';
END;

测试

创建触发器

insert 插入数据 出现提示成功

加入这条命令就是阻止执行(三类触发器都可以用)

阻止触发事件

3. 事务

特性:原子性,一致性,隔离性,持久性,

开始事务

BEGIN  TRANSACTION;

提交事务

COMMIT  TRANSACTION;

回滚事务

ROLLBACK  TRANSACTION;

举个实例

begin transaction
declare @sum int    #定义变量  执行成功为0,执行不成功不等于0.
set @sum=0

李四向张三转1000 (张三+1000 李四—1000)
update 表_name set 李四的钱=李四的钱-1000
where name='李四'
set @sum=@sum+@@ERROR 
update 表_name set 张三的钱=张三的钱+1000
where name='张三'

set @sum=@rsum+@@error
print '查看转账事务中的余额'
select * from 表_name

if @sum<>0    /    @sum!=0 
 begin
  print '交易失败,回滚事务'
  rollback transaction
 end
else
 begin
   print '交易成功 谢谢合作'
   commit transaction
  end

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习在自然语言处理中的应用

深度学习在自然语言处理中的应用 一、引言 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;作为其重要分支&#xff0c;已经在诸多领域取得了令人瞩目的成果。深度学习作为当前最炙手可热的技术&#xff0c;为NLP带来了革命性的变革。本文将…

红队打靶练习:MISDIRECTION: 1

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.12.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.12.1 00:50:56:c0:00:08 …

【计算机毕业设计】SSM在线宿舍管理系统

项目介绍 本项目包含管理员、宿舍管理员、学生三种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,院系管理,专业管理,年级管理,班级管理,学生设置,宿舍管理员管理,宿舍楼管理,宿舍管理,床位管理,学生入住登记,学生退房管理等功能。 宿舍管理员角色包含以…

如何在 Linux 中配置 firewalld 规则

什么是FirewallD “firewalld”是firewall daemon。它提供了一个动态管理的防火墙&#xff0c;带有一个非常强大的过滤系统&#xff0c;称为 Netfilter&#xff0c;由 Linux 内核提供。 FirewallD 使用zones和services的概念&#xff0c;而 iptables 使用chain和rules。与 ip…

LabVIEW的便携式车辆振动测试分析

随着计算机和软件技术的发展&#xff0c;虚拟仪器正逐渐成为机械工业测试领域的主流。在现代机械工程中&#xff0c;特别是车辆振动测试&#xff0c;传统的测试方法不仅设备繁杂、成本高昂&#xff0c;而且操作复杂。为解决这些问题&#xff0c;开发了一款基于美国国家仪器公司…

【React】echarts-for-react 的使用

文章目录 echarts-for-react &#xff1a;一个简单的 Apache echarts 的 React 封装配置项手册&#xff1a;https://echarts.apache.org/zh/option.html#title 安装依赖 $ npm install --save echarts-for-react# echarts 是 echarts-for-react的对等依赖,您可以使用自己的版本…

新能源汽车冷却系统的水道管口类型有哪些?格雷希尔针对这些管口密封的快速接头有哪些?

对于新能源汽车&#xff0c;不仅电池&#xff0c;还有电机、电控、充电单元部件&#xff0c;都需要处于适宜的工作温度&#xff0c;才能维持整车的正常运行。而这些部件在运行过程中会产生大量的热量&#xff0c;如果不及时散热会对汽车的性能、寿命产生影响&#xff0c;甚至可…

基于ssm西安旅游管理系统论文

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对西安旅游信息管理的提升&#x…

基于element-ui table组件的二次封装

文章目录 配置数据基础分析封装 el-table-column使用插槽强化结语 相信 element-ui 大家都有所耳闻&#xff0c;table 也是老朋友了&#xff0c;不过有没有在使用他的时候&#xff0c;大家是怎么使用的呢&#xff1f;是直接在官网上cv使用吗&#xff1f;这种方式&#xff0c;我…

2023启示录丨自动驾驶这一年

图片&#xff5c;《老人与海》插图 过去的20年&#xff0c;都没有2023年如此动荡。 大模型犹如一颗原子弹投入科技圈&#xff0c;卷起万里尘沙&#xff0c;传统模式瞬间被夷为平地&#xff0c;在耀眼的白光和巨大的轰鸣声之下&#xff0c;大公司、创业者、投资人甚至是每一位观…

裕泰微YT8521SH PHY芯片在uboot下的代码适配(一)

文章目录 支持的工作模式自协商模式下改变 PHY 支持的速度和双工能力 RGMII 配置通过 POS 设置 RX_delay通过寄存器加长 RX_delayTX_delay 的设置驱动能力的设置 LED 灯配置硬件电路设计相关问题快速上下电的要求上电复位时序要求 YT8521SC/SH 是一款单口千兆以太网 PHY。 支持…

OSPF ROUTER-ID-新版(15)

目录 整体拓扑 操作步骤 1.INT 验证Router-ID选举规则 1.1 查看路由器Router-ID 1.2 配置R1地址 1.3 查看R1接口信息 1.4 查看R1Router-ID 1.5 删除接口IP并查看Router-ID 1.6 手工配置Router-ID 2.基本配置 2.1 配置R1的IP 2.2 配置R2的IP 2.3 配置R3的IP 2.4 配…

数据库管理-第128期 2023总结(202301229)

数据库管理-第128期 2023总结&#xff08;202301229&#xff09; 到了2023年的最后一个工作日&#xff0c;也该对即将过去的2023年做一个小小的总结&#xff1a; 1 写文章 2023年在CSDN总共写了82篇文章。 2023年4月开始在墨天轮写文章&#xff0c;总共写了75篇文章&#xf…

电子工程师如何接私活赚外快?

对电子工程师来说&#xff0c;利用业余时间接私活是个很常见的技术&#xff0c;不仅可以赚取额外收入&#xff0c;也能提升巩固技术&#xff0c;可以说国内十个工程师&#xff0c;必有五个在接私活养家糊口&#xff0c;如果第一次接私活&#xff0c;该如何做&#xff1f; 很多工…

基于Springboot+vue医院管理系统(前后端分离)

最近有一些读者问我有没有完整的基于SpringbootVue的项目源码&#xff0c;今天给大家整理了一下&#xff0c;无偿分享给大家。 功能&#xff1a; 医生信息管理 换着信息管理 挂号信息管理 药物信息管理 检查项目管理 病床信息管理 排班信息管理 数据统计分析 开发工具…

基于低代码的指尖遐想_1

解决问题或分析事务的思考方法&#xff1a; 1、什么是低代码&#xff0c;或者说现在的低代码能做什么&#xff0c;未来能做什么&#xff0c;其存在的合理性是什么&#xff1f; 回答这个问题的本质是搜集信息&#xff0c;公开的或非公开的。 答&#xff1a;低代码主要分为广义…

视频号三年:质疑红利,理解红利,抄底红利

“去年刚进来时&#xff0c;视频号带货配套都还不成熟&#xff0c;团队都不熟悉后台操作&#xff0c;硬是磨合了一个多月&#xff0c;也做好了亏钱的准备。不过前两天刚算了帐&#xff0c;今年 GMV 已经比去年翻了两番。” “22年想靠投流起号&#xff0c;但每次投流计划基本消…

地震烈度速报与预警工程成功案例的经验分享 | TDengine 技术培训班第一期成功落地

近日&#xff0c;涛思数据在成都开设了“国家地震烈度速报与预警工程数据库 TDengine、消息中间件 TMQ 技术培训班”&#xff0c;这次培训活动共分为三期&#xff0c;而本次活动是第一期。其目标是帮助参与者深入了解 TDengine 和 TMQ 的技术特点和应用场景&#xff0c;并学习如…

geemap学习笔记037:分析地理空间数据--坐标格网和渔网

前言 坐标格网&#xff08;Coordinate Grid&#xff09;简称“坐标网”&#xff0c;是按一定纵横坐标间距&#xff0c;在地图上划分的格网&#xff0c;坐标网是任何地图上不可缺少的要素之一。下面将详细介绍一下坐标格网和渔网。 1 导入库并显示地图 import ee import geem…

node 项目中 __dirname / __filename 是什么,为什么有时候不能用?

__dirname 是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本所在的目录的绝对路径。 __filename 同理&#xff0c;是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本的绝对路径&#xff0c;包括文件名。 在 Node.js 中&#xff0c;__dirname / __filename是…