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

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

在 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
 


相关文章
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第18天】SQL Server 存储过程具有提高性能、增强安全性、代码复用和易于维护等优点。它可以减少编译时间和网络传输开销,通过权限控制和参数验证提升安全性,支持代码共享和复用,并且便于维护和版本管理。然而,存储过程也存在可移植性差、开发和调试复杂、版本管理问题、性能调优困难和依赖数据库服务器等缺点。使用时需根据具体需求权衡利弊。
363 1
|
9月前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
712 11
|
存储 SQL 缓存
SQL Server存储过程的优缺点
【10月更文挑战第22天】存储过程具有代码复用性高、性能优化、增强数据安全性、提高可维护性和减少网络流量等优点,但也存在调试困难、移植性差、增加数据库服务器负载和版本控制复杂等缺点。
580 1
|
存储 SQL 数据库
SQL Server存储过程的优缺点
【10月更文挑战第17天】SQL Server 存储过程是预编译的 SQL 语句集,存于数据库中,可重复调用。它能提高性能、增强安全性和可维护性,但也有可移植性差、开发调试复杂及可能影响数据库性能等缺点。使用时需权衡利弊。
310 3
|
存储 SQL 数据库
Sql Server 存储过程怎么找 存储过程内容
Sql Server 存储过程怎么找 存储过程内容
770 1
|
存储 SQL 数据库
SQL Server 临时存储过程及示例
SQL Server 临时存储过程及示例
223 3
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
616 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
447 9
|
存储 SQL 数据库
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
这篇文章介绍了数据库中触发器的设计概念,包括创建、修改、删除触发器的方法,并通过实验内容教授如何使用SQL命令创建DML触发器以及如何利用触发器实现数据的完整性和自动化处理。
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。