触发器及存储过程(procedure)

存储过程(procedure):

  1. 创建一个名为p1的存储过程,功能是查找成绩表中成绩为空的学生学号,姓名;执行P1。
create procedure p1
as
select Sno,Sname
from Student
where Sno in
(
	select Sno
	from SC
	where grade is null
)
exec p1//exec 执行一个存储过程
  1. 创建一个名称为P2的存储过程,该存储过程的功能是向Course数据表中插入一条记录(包含Cno,Cname,Credit),新记录的值由参数提供;执行存储过程P2,将课程号为c5,课程名为软件工程,学分为3的课程信息插入到课程表中。
create procedure p2
(
	@Cno char(4),//@cno相当于定义的参数
	@Cname nchar(40),
	@Credit smallint
)
as
insert into Course values(@Cno,@Cname,@Credit)//values 数据,值
exec p2 'c5','软件工程','3'//exec 执行一个存储过程,在这里相当于给参数赋值。
  1. 创建一个名称为P3的存储过程,该存储过程的功能是从成绩表中查询指定课程的最高分和最低分,列名为“最高分”,“最低分”;执行存储过程P3,查看课程名为“C语言”的最高分,最低分。
create procedure p3 @课程名 char(30)
as
select max(grade) 最高分,min(grade) 最低分//max() 最大值函数  min() 最小值函数
from SC
where Cno=
(
	select Cno
	from Course
	where Cname= @课程名
)
exec p3 'C语言'
  1. 定义能够返回值的存储过程。创建一个名称为P4的存储过程。该存储过程的功能是从数据表S中根据学号查询某一同学的姓名,及选修课程的课程名及成绩。查询的结果由参数@sn, @cname ,@grade返回;
    执行存储过程P4,查询学号为1640的姓名、选修课程的课程名及成绩。
create procedure p4
(	
	@Sno varchar(6),//定义参数
	@Sn nvarchar(10) output,//有的存储过程需要输出结果到一个变量中,有的却不需要。需要记录输出结果时带上output就可以把执行完后的结果赋给变量,然后拿到那个值可以作为需要的时候使用了。
	@Cname nvarchar(10) output,
	@grade int   output
)
as
select @Sn=Sname,@Cname=Cname,@grade=grade//给参数赋值
from Student,SC,Course
where SC.Sno=@Sno and Student.Sno=@Sno and Course.Cno=SC.Cno
declare @sn varchar(6),@Cname nvarchar(20),@grade int//declare 声明变量
exec p4 1640,@sn output,@cname output,@grade output
select @sn 姓名,@Cname 课程名,@grade 成绩

触发器:

  1. 创建一个触发器trigger1,在学生表Student中删除某一个学生时,在选课表SC中该学生的选课记录也全部被删除。
create trigger trigger1
on Student
after delete
as
delete from SC
where SC.Sno in
(select Sno from deleted)//deleted 在delete表中临时保存了被删除或被更新前的记录行

  1. 设计一个DDL触发器trigger2,禁止修改和删除当前数据库中的任何表,提示语句为“不能删除或修改数据库!”。
create trigger trigger2 
on database
for drop_table,alter_table
as print'不能删除或修改数据库!'
rollback//数据库里做修改后(update ,insert , delete)未commit(提交)之前使用rollback可以恢复数据到修改之前。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值