存储过程和触发器

存储过程

存储过程(Stored Procedure),是由一系列SQL语句构成完成一定的功能的程序方法,通过流程控制和SQL语句组成。
存储过程是数据库中的一个重要对象,在数据量特别庞大的情况下利用存储过程提高效率,一次编译后永久有效
存储过程

创建

创建存储过程前确定要实现什么功能,存储过程的调用可以是无参的也可以是有参的,可以有返回值也可以没有

不带参数

create procedure 查询全部签到记录
as
begin
select * from T_QianDaoLog
end

执行完成之后可以在 数据库-可编程性-存储过程 中找到
存储过程存放位置

带参数

create proc 根据UserId和Month查询
@UserId int,
@Month int
as 
begin
select * from T_QianDaoLog where UserId=@UserId and QianDaoMonth=@Month
end

调用

调用无参存储过程

execute 查询全部签到记录  //可以将execute简化为exec

调用有参存储过程

exec 根据UserId和Month查询 1,5

调用有参数的存储过程,可以同时写出参数名称赋值

exec 根据UserId和Month查询 @UserId=1,@Month=5

此类写法必须要与存储过程中的参数名称保持一致,否则会报错

执行以后效果为下面这种
存储过程运行结果

修改

alter proc 你想修改的某个已存在的存储过程的名称
... //如果有参数可以增加参数
as begin
... //这里写具体的sql语句
end

执行之后你所修改的的存储过程内容就会变更

删除

drop proc 你想删除的某个已存在的存储过程的名称

执行之后,你所选择的这个存储过程就被删掉了

触发器

触发器是用来保重数据完整性的一种方法,通俗点来说就是一种比较特殊的存储过程,不能主动调用,在对表进行操作会触发这个过程

触发器的分类

1.DDL触发器(数据定义语言)
DDL触发器是指当服务器或者数据库中发生数据定义(create,drop,alter开头的语句)事件激活时,针对数据库的更新变化
2.DML触发器(数据操作语言)
DML触发器是指当数据表中发生数据操作(insert,delete,update)事件时执行的操作
工作原理:
DML触发器工作原理

创建

create trigger 触发器名
on 表名
[with encryption]
for | after | instead of [delete,insert,update]
as
sql语句

禁用启用与修改

禁用和启用

alter table 数据表名 disable[禁用],enable[启用] trigger 触发器名

修改

create trigger 触发器名
on 表名
[with encryption]
for | after | instead of [delete,insert,update]
as
sql语句

删除

drop trigger [if exists] 触发器名(同时删除多个触发器需要用,隔开)

注意事项

在编写存储过程方法时,不能其中删除另一个存储过程,只能调用另一个存储过程
调用存储过程的声明词(create proc,alter proc…)在SQLServer中不区分大小写,但调用存储过程时,存储过程名称需要严格保持一致