SQL Server 存储过程和触发器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/marko_zheng/article/details/85705030

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触发器'   --在这里执行触发器执行之后的操作

猜你喜欢

转载自blog.csdn.net/marko_zheng/article/details/85705030
今日推荐