数据库 SQL 实验报告存储过程和触发器

年级

班号

组号

 学号

 

专业

日期

 姓名

实验名称

实验九  存储过程和触发器

实验室

实验

目的

要求

1、掌握存储过程的概念、作用、分类及对应的创建、删除语句的语法格式

2、掌握触发器的概念、作用、分类及对应的创建、删除语句的语法格式

3、了解插入表inserted和删除表deleted的作用及其用法

实验

环境

SQL Server 2014

实验内容或

实验题目

1、创建并执行一个无参数的存储过程proc_product1,通过该存储过程可以查询商品类别名称为“笔记本电脑”的商品的详细信息:包括商品编号、商品名称、品牌、库存量、单价和上架时间信息

2、创建并执行一个带输入参数的存储过程proc_product2,通过该存储过程可以根据输入参数供应商名称和包含关键字的商品名称进行商品具体信息的查询:包括商品编号、商品名称、品牌、库存量、单价、成本价、供应商名称、联系电话信息

3、创建并执行一个带输入参数和输出参数的存储过程proc_product3,通过该存储过程可以根据输入的会员用户名查询出该会员购买的商品信息:包括商品名称、购买数量和实付总金额信息

4、删除存储过程proc_product3

5、创建一个名为tri_insert1的DML触发器,该触发器的作用是:当向会员表member中添加一条记录时,如果新添加的会员编号已经存在于表中,则禁止插入该条记录,并提示该会员已经存在!。

6、创建一个名为tri_update1的DML触发器,该触发器的作用是:不允许修改订单表orders中的discount属性列的值,并给出提示语句“禁止修改orders表中的discount属性列的数据!”

7、创建一个名为tri_insert2的DML触发器,该触发器的作用是:当向employee新插入一条会员记录时,系统自动将部门表department中对应部门的属性列deptotal进行加1处理

8、创建一个名为tri_delete的DML触发器,该触发器的作用是:用删除会员表menmber中某条会员记录的时,系统自动在订单表orders中查询是否有该会员的订单记录,如果有,则同时删除该会员的所有订单记录

9、删除触发器tri_delete

步骤如下:

/*1、创建并执行一个无参数的存储过程proc_product1,通过该存储过程可以查询商品类别名称为

“笔记本电脑”的商品的详细信息:包括商品编号、商品名称、品牌、库存量、单价和上架时间信息*/

create procedure proc_product1

as

select prono,proname,brand,stock,price,ontime

from product

where catno in(

select catno

from category

where catname like'笔记本电脑'

)

go

exec proc_product1

go

/*2、创建并执行一个带输入参数的存储过程proc_product2,通过该存储过程可以根据输入参数供应商名称

和包含关键字的商品名称进行商品具体信息的查询:包括商品编号、商品名称、品牌、库存量、单价、成本价、供应商名称、联系电话信息*/

create procedure proc_product2(@name1 varchar(30),@name2 varchar(30))

as

select product.prono,proname,brand,stock,price,cost,supplier.supname,telephone

from product,supplier

where  product.supno=supplier.supno and

 supplier.supname=@name1 and product.proname=@name2

exec proc_product2 '顺京通讯有限公司','华为P50 4G全网通智能手机'

go

/*3、创建并执行一个带输入参数和输出参数的存储过程proc_product3,通过该存储过程可以根据输入的会员

用户名查询出该会员购买的商品信息:包括商品名称、购买数量和实付总金额信息*/

create procedure proc_product3(@name3 varchar(30))

as

select product.proname,orders.qty,tatalmoney

from product,orders,member

where product.prono=orders.prono and member.memno=orders.memno and memname=@name3

go

exec proc_product3 '关羽'

go

/*4、删除存储过程proc_product3*/

drop procedure proc_product3

go

/*5、创建一个名为tri_insert1的DML触发器,该触发器的作用是:当向会员表member中添加一条记录时,如

果新添加的会员编号已经存在于表中,则禁止插入该条记录,并提示该会员已经存在!。*/

create trigger tri_insert1

on member

instead of insert

as

declare @no int

select @no =memno from inserted

if exists(select memno from member where memno=@no)

begin

rollback transaction

print'会员已存在!'

end

else

begin

 insert into member select*from inserted

 print'完成'

end

go

insert

into member

values('2001','李四','上海','10086','cd','123456')

go

/*6、创建一个名为tri_update1的DML触发器,该触发器的作用是:不允许修改订单表orders中的discount属

性列的值,并给出提示语句“禁止修改orders表中的discount属性列的数据!”*/

create trigger tri_update1

on orders

after update

as

if update(discount)

begin

rollback transaction

print'禁止修改orders表中的discount属性列的数据!'

end

go

update orders

set discount =110

where orderno='1501001'

go

/*7、创建一个名为tri_insert2的DML触发器,该触发器的作用是:当向employee新插入一条会员记录时,系

统自动将部门表department中对应部门的属性列deptotal进行加1处理*/

go

create trigger tri_insert2

on employee

after insert

as

begin

 update department

 set deptotal = deptotal+1

 where depno = (select depno from inserted);

end

go

insert

into employee

values('1007','小张','1','男','1111111','xxx','123456')

select* from department

/*8、创建一个名为tri_delete的DML触发器,该触发器的作用是:用删除会员表menmber中某条会员记录的时,

系统自动在订单表orders中查询是否有该会员的订单记录,如果有,则同时删除该会员的所有订单记录*/

go

create trigger tri_delete

on member

for delete

as

delete from orders

where memno=(select memno from deleted)

delete from member

where memname='关平'

select *from orders

/*9、删除触发器tri_delete*/

drop trigger tri_delete

(写不完时,可另加附页。)

组内

分工

可选

 

实验运行结果或者是验证性的结果:

1. /*1、创建并执行一个无参数的存储过程proc_product1,通过该存储过程可以查询商品类别名称为

“笔记本电脑”的商品的详细信息:包括商品编号、商品名称、品牌、库存量、单价和上架时间信息*/

create procedure proc_product1

as

select prono,proname,brand,stock,price,ontime

from product

where catno in(

select catno

from category

where catname like'笔记本电脑'

)

go

exec proc_product1

go

  2.

/*2、创建并执行一个带输入参数的存储过程proc_product2,通过该存储过程可以根据输入参数供应商名称

和包含关键字的商品名称进行商品具体信息的查询:包括商品编号、商品名称、品牌、库存量、单价、成本价、供应商名称、联系电话信息*/

create procedure proc_product2(@name1 varchar(30),@name2 varchar(30))

as

select product.prono,proname,brand,stock,price,cost,supplier.supname,telephone

from product,supplier

where  product.supno=supplier.supno and

 supplier.supname=@name1 and product.proname=@name2

exec proc_product2 '顺京通讯有限公司','华为P50 4G全网通智能手机'

go

 3.

/*3、创建并执行一个带输入参数和输出参数的存储过程proc_product3,通过该存储过程可以根据输入的会员

用户名查询出该会员购买的商品信息:包括商品名称、购买数量和实付总金额信息*/

create procedure proc_product3(@name3 varchar(30))

as

select product.proname,orders.qty,tatalmoney

from product,orders,member

where product.prono=orders.prono and member.memno=orders.memno and memname=@name3

go

exec proc_product3 '关羽'

go

/*4、删除存储过程proc_product3*/

drop procedure proc_product3

go

/*5、创建一个名为tri_insert1的DML触发器,该触发器的作用是:当向会员表member中添加一条记录时,如

果新添加的会员编号已经存在于表中,则禁止插入该条记录,并提示该会员已经存在!。*/

create trigger tri_insert1

on member

instead of insert

as

declare @no int

select @no =memno from inserted

if exists(select memno from member where memno=@no)

begin

rollback transaction

print'会员已存在!'

end

else

begin

 insert into member select*from inserted

 print'完成'

end

go

insert

into member

values('2001','李四','上海','10086','cd','123456')

go

  5.

 6.

*6、创建一个名为tri_update1的DML触发器,该触发器的作用是:不允许修改订单表orders中的discount属

性列的值,并给出提示语句“禁止修改orders表中的discount属性列的数据!”*/

create trigger tri_update1

on orders

after update

as

if update(discount)

begin

rollback transaction

print'禁止修改orders表中的discount属性列的数据!'

end

go

update orders

set discount =110

where orderno='1501001'

go

 7.

/*7、创建一个名为tri_insert2的DML触发器,该触发器的作用是:当向employee新插入一条会员记录时,系

统自动将部门表department中对应部门的属性列deptotal进行加1处理*/

go

create trigger tri_insert2

on employee

after insert

as

begin

 update department

 set deptotal = deptotal+1

 where depno = (select depno from inserted);

end

go

insert

into employee

values('1007','小张','1','男','1111111','xxx','123456')

select* from department

前:

后:

8.

*8、创建一个名为tri_delete的DML触发器,该触发器的作用是:用删除会员表menmber中某条会员记录的时,

系统自动在订单表orders中查询是否有该会员的订单记录,如果有,则同时删除该会员的所有订单记录*/

go

create trigger tri_delete

on member

for delete

as

delete from orders

where memno=(select memno from deleted)

delete from member

where memname='关平'

select *from orders

 关平为 2009

 

 /*9、删除触发器tri_delete*/

drop trigger tri_delete

分析结果以及在试验中应注意的问题:

写错no和name 所以数据类型错了

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值