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 表_nameif @sum<>0    /    @sum!=0 beginprint '交易失败,回滚事务'rollback transactionend
elsebeginprint '交易成功 谢谢合作'commit transactionend

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

gitlab请求合并分支

直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口&#xff1a; 仓库控制台的这两个地方都…

第4章 信息收集

本章将阐述信息收集的概念及其作用&#xff0c;进而介绍信息收集阶段的各项渗透测试工作。此外&#xff0c;我们还会介绍 Kali Linux 收录的信息收集工具。希望读者在阅读本章之后能够理解在信息收集阶段的渗透测试工作&#xff0c;并且能够在实际的渗透测试中顺利收集各种必要…

javaWebssh民宿管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh民宿管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模 式开发。开发环境为TOMCAT7.0,My…

Spark编程范例:Word Count示例解析

Apache Spark是一个强大的分布式计算框架&#xff0c;用于处理大规模数据。Word Count示例是Spark入门教程中的经典示例&#xff0c;旨在展示如何使用Spark来进行简单的文本处理和数据分析。本文将深入解析Word Count示例&#xff0c;以帮助大家更好地理解Spark的基本概念和编程…

V-rep(CoppeliaSim)添加相机,与python联合仿真,并使用python读取V-rep中的RGB图与深度图

目录 前言在V-rep中构建场景建立python与V-rep通信 前言 本文主要介绍了如何使用python与V-rep联合仿真&#xff0c;并用OpenCV可视化V-rep中视觉传感器所能看到的 RGB图和深度图&#xff0c;效果图如下。 在V-rep中构建场景 本文使用的V-rep版本是3.5&#xff1a; 打开V-…

再谈动态SQL

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 文章目录 专栏精选摘要引言正文动态sql标签ifchoose...when...otherwisewhere、…

如何实现WinApp的UI自动化测试?

WinApp&#xff08;WindowsAPP&#xff09;是运行在Windows操作系统上的应用程序&#xff0c;通常会提供一个可视的界面&#xff0c;用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome&#xff0c;都属于WinApp。常见的WinApp&…

日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

前言 随着互联网和大数据的迅猛发展&#xff0c;分布式日志系统和日志分析系统已广泛应用&#xff0c;几乎所有应用程序都使用各种日志框架记录程序运行信息。因此&#xff0c;作为工程师&#xff0c;了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影…

使用spring boot实现异常的统一返回

在这个前后端分离的时代&#xff0c;一个 统一的数据格式非常重要。本次我们实现用spring boot实现一下返回给前端数据的统一格式&#xff0c;不再出现服务器500的错误。 新建一个spring boot项目&#xff0c;并导入knife4j的依赖。 写一个controller控制器&#xff0c;用来是…

maven中dependencyManagement标签

简介 dependencyManagement正如其名&#xff0c;用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后&#xff0c;子项目&#xff08;module&#xff09;中引用相同的依赖时可以不指定version标签自动引入…

<软考高项备考>《论文专题 - 33 沟通管理(1) 》

1 成本管理基础 1.1 写作要点 过程定义、作用写作要点、思路规划沟通管理规划沟通管理是基于每个干系人或干系人群体的信息需求、可用的组织资产&#xff0c;以及具体项目的需求&#xff0c;为项目沟通活动制定恰当的方法和计划的过程。作用:①及时向干系人提供相关信息;②引…

Bert-vits2-2.3-Final,Bert-vits2最终版一键整合包(复刻生化危机艾达王)

近日&#xff0c;Bert-vits2发布了最新的版本2.3-final&#xff0c;意为最终版&#xff0c;修复了一些已知的bug&#xff0c;添加基于 WavLM 的 Discriminator&#xff08;来源于 StyleTTS2&#xff09;&#xff0c;令人意外的是&#xff0c;因情感控制效果不佳&#xff0c;去除…

有道翻译web端 爬虫, js

以下内容写于2023-12-28, 原链接为:https://fanyi.youdao.com/index.html#/ 1 在输入框内输入hello world进行翻译,通过检查发出的网络请求可以看到翻译文字的http接口应该是: 2 复制下链接最后的路径,去js文件中搜索下: 可以看到这里是定义了一个函数B来做文字的翻译接口函数…

在matlab中对hsv进行均匀量化和非均匀量化

首先&#xff0c;进行非均匀量化&#xff0c;H,S,V三通道分别量化为16,4,4级&#xff0c;返回一个向量。量化依据如下表&#xff1a; function vec getHsvHist(Image) [M,N,O] size(Image); if O~ 3error(3 components are needed for histogram); end [h,s,v] rgb2hsv(Imag…

GoLand for mac 2023.3.2 Go语言开发集成环境

GoLand 是 JetBrains 公司开发的一款专业的 Go 语言集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了许多强大的功能来提高 Go 语言开发者的生产力和代码质量。 一、概述 GoLand 是基于 IntelliJ 平台构建的&#xff0c;继承了 IntelliJ IDEA 的强大功能和稳定性…

【ES】Elasticsearch常见问题与解决(持续更新)

目录 Elasticsearch常见问题 1. 集群健康问题 2. 性能问题 3. 映射问题 4. 分片问题 5. 内存问题 6. 硬件问题 7. 配置问题 8. 安全问题 9. 网络问题 10. 版本不兼容 Elasticsearch日常使用小结 【Q】离线告警&#xff0c;有IP已离线 【Q】统计某个应用的某个索引…

小梅哥Xilinx FPGA学习笔记16——FSM(状态机)的学习

目录 一、 状态机导读 1.1 理论学习 1.2 状态机的表示 1.3 状态机编码 1.4 状态机描述方式 二 、实战演练一&#xff08;来自野火&#xff09; 2.1 实验目标 2.2 模块框图 2.3 状态转移图绘制 2.4 设计文件 2.5 仿真测试文件 2.6 仿真结果 三、 实战演练二&…

LLM之RAG实战(九)| 高级RAG 03:多文档RAG体系结构

在RAG&#xff08;检索和生成&#xff09;这样的框架内管理和处理多个文档有很大的挑战。关键不仅在于提取相关内容&#xff0c;还在于选择包含用户查询所寻求的信息的适当文档。基于用户查询对齐的多粒度特性&#xff0c;需要动态选择文档&#xff0c;本文将介绍结构化层次检索…

【SpringBoot】第2章 SpringBoot核心配置与注解

学习目标 熟悉SpringBoot全局配置文件的使用 熟悉SpringBoot自定义配置 掌握SpringBoot配置文件属性值注入 掌握Profile多环境配置 了解随机值设置以及参数间引用 2.1 全局配置文件 全局配置文件能够对一些默认配置进行修改。SpringBoot使用一个application.properties…

王道考研计算机网络——应用层

如何为用户提供服务&#xff1f; CS/P2P 提高域名解析的速度&#xff1a;local name server高速缓存&#xff1a;直接地址映射/低级的域名服务器的地址 本机也有告诉缓存&#xff1a;本机开机的时候从本地域名服务器当中下载域名和地址的对应数据库&#xff0c;放到本地的高…