SQL Server 存储过程和触发器

SQL Server 存储过程

存储过程:一组为了完成特定功能的SQL语句集,编译之后存储在数据库中。和函数类似,但功能大于函数

存储过程可包含程序流,逻辑,以及对数据库的查询,可以接受参数,输出参数,返回单个或多个结果集

 /*一个简单的存储过程*/
 create procedure stu_test1
 as
 select * from stu

 exec stu_test1    --调用

drop procedure stu_test1   --删除存储过程

/*带参数的存储过程*/
 create procedure stu_test2
 @prams int   --创建用来储存的变量
 as
 select * from stu where id = @prams

 exec stu_test2 @prams=2

 /*输出一部分参数*/
 create procedure stu_test3
 @prams int,   --传递进来的id
 @output varchar(200) output   --定义一个输出参数
 as
 select @output = stu_name from stu where id = @prams

 declare @out varchar(200)    --声明一个用于 存储输出值的变量
 exec stu_test3 @prams=2,@output=@out output  
 print @out   --输出存储过程返回的值
/*查询所有存储过程  按照创建的时间排序 */
 select * from sys.objects order by create_date desc  

修改存储过程 【直接右键修改】
在这里插入图片描述

SQL Server 触发器

触发器可以看作是一个特殊的存储过程,在了解触发器之前应该先对存储过程有一个了解

触发器:在修改指定表中数据是执行的存储过程。

经常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或一致性。用户不能绕过触发器,所以可以用它来强制实施复杂业务规则,确保数据完整性

触发器不同于存储过程,触发器通过事件进行触发而执行,存储过程可以通过exec【exec stu_test1】来直接执行。当对某一张表进行删(delete) 改(update) 加(insert)操作的时候,sqlserver会自动执行定义的触发器。

触发器是被动调用的 ,即在满足特定事件的情况下被执行,而存储过程是在使用操作语句时主动进行调用

触发器种类:DDL DML

DDL触发器

数据库定义语言(DDL)触发器,当服务器或数据库中发生数据库定义语言事件的时候将被触发,包括以下操作

  • 要防止对数据库架构进行修改
  • 希望响应数据库中发生的某种情况以响应数据库架构中的更改
  • 记录数据库架构的修改事件

DML触发器

数据库操作语言(DML),包括以下三种:

  • insert 触发器-----
  • update 触发器
  • delete 触发器
DML触发器可以查询其他表,也能包含复杂的T-SQL语句,将触发器和触发他的语句作为 可在触发器内回滚的单个事务对待,,,既检测到错误,自动回滚
创建insert触发器

INSERT触发器是DML触发器的一种

 /*创建一个insert触发器在stu表中添加数据的时候触发 */
go
create trigger stu_test10
on stu
for insert
as
print 1 

select * from stu

insert into stu (stu_id,stu_name,stu_chinese,stu_math,stu_english,stu_total) values
('11','存储','99','99','99','0')

运行结果如下
在这里插入图片描述

创建delete触发器

在对数据表进行删除数据时,可以使用DELETE触发器,在删除数据后可以进行提示。

/*创建delete触发器*/
 go
 create trigger stu_test11
 on stu  --操作stu表
 for delete  --指定为delete触发器
 as
 print 'delete触发器'   --在这里执行触发器执行之后的操作

 delete stu where id = 2

运行如下
在这里插入图片描述

UPDATE触发器

UPDATE可以看作是INSERT触发器与DELETE触发器的结合,在使用UPDATE时先进行DELETE,再进行INSERT

/*创建update触发器*/
 go
 create trigger stu_test12
 on stu  --操作stu表
 for update    --指定为update触发器
 as
 print 'update触发器'   --在这里执行触发器执行之后的操作

### 存储过程触发器的介绍 - **存储过程**:存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可以包含复杂的逻辑,如条件判断、循环等,用于处理各种数据库操作,提高代码的复用性可维护性。 - **触发器**:触发器是对表进行插入、更新、删除的时候会自动执行的特殊存储过程。它基于表创建,由表上的特定事件触发执行,一般用于实现比check约束更复杂的约束,保证数据完整性 [^1]。 ### 存储过程触发器的使用方法 - **存储过程的使用方法**: - **创建存储过程**:使用`CREATE PROCEDURE`语句创建,例如: ```sql CREATE PROCEDURE GetBooksByType @typeID int AS BEGIN SELECT * FROM [dbo].[Books] WHERE typeID = @typeID; END; ``` - **执行存储过程**:使用`EXEC`或`EXECUTE`语句调用,例如: ```sql EXEC GetBooksByType 1; ``` - **触发器的使用方法**: - **创建触发器**:使用`CREATE TRIGGER`语句创建,例如创建一个在插入书籍时更新书籍类型数量的触发器: ```sql create trigger tgr_bookInsert on [dbo].[Books] for insert as --定义变量,存储新增书籍的类型ID declare @typeID int --定义变量存储书籍类型的数量 declare @typeNums int --找到存储新增书籍的类型ID select @typeID=typeID from inserted --计算出对应书籍类型的数量 select @typeNums=count(*) from [dbo].[Books] where typeID=@typeID --更新BookTypes表 update [dbo].[BookTypes] set Nums=@typeNums ``` - 触发器无需手动调用,当对表进行相应的`INSERT`、`UPDATE`、`DELETE`操作时会自动触发。 ### 存储过程触发器的区别 - **运行方式**:触发器不能执行`EXECUTE`语句调用,而是在用户执行`Transact - SQL`语句时自动触发执行;而存储过程需要用户、应用程序或者触发器来显式地调用并执行 [^2]。 - **触发时机**:触发器是在对表进行特定操作(如`insert`、`update`、`delete`)时自动触发;存储过程需要主动调用才会执行。 - **功能侧重点**:存储过程主要用于实现复杂的业务逻辑,可被多次调用;触发器主要用于保证数据完整性,处理与表事件相关的约束数据维护 [^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值