存储过程和触发器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程和触发器管理

实验报告

学院:信息学院班级:电子信息工程

学号:20091060253 姓名:郑璇成绩:

【实验目的】

1.学习创建存储过程。

2.学习创建管理触发器。

【实验内容】

1.在pubs数据库中创建存储过程avg_price,用于求所有出版图书的平均单价。并通过输出参数返回该平均单价。要求在创建过程之前要首先判断该存储过程是否已经存在,如果存在,则将其删除。执行存储过程,打印图书平均单价。

if exists (select name from sysobjects

where name='avg_price' and type='p')

drop procedure avg_price

go

create procedure avg_price

@avgprice float output

as

select @avgprice=avg(price) from titles

go

declare @avgprice float

exec avg_price @avgprice output

print @avgprice

3.在pubs数据库中创建存储过程max_price,根据存储过程的图书类型(输入参数)返回该类图书的最高单价(输出参数)。要求在创建过程之前要首先判断该存储过程是否已经存在,如果存在,则将其删除。

if exists(select name from sysobjects where name='max_price' and type='p')

drop procedure max_price

go

create procedure max_price

@type char(50),

@max float output

as

select @max=max(price) from titles where type=@type

go

4.执行第三题创建的存储过程max_price,指定图书类型为“mod_cook”,打印该类型图书的最高单价。

declare @max float

exec max_price'mod_cook',@max output

print @max

5.删除存储过程avg_price,max_price。

drop procedure avg_price

drop procedure max_price

二.触发器

创建一个“学生信息”数据库,包含“学生基本信息”表、“专业”表和“系”表,各表包含的字段如下。

●“学生基本信息”表:学号;性别;班级;出生日期;专业编号。

●“专业”表:专业编号;专业名称;系编号。

●“系”表:系编号;系名称;系简介。

各字段类型按其实际含义自行定义,输入一些数据,要求数据要有代表性。

以下操作要求全部在查询分析器中完成,保存或记录实现各题功能的Transcat-SQL语

句。

1.在“专业”表上创建一个INSERT触发器“TRG1”。当发生插入专业表操作时,

将显示插入的记录。

2.在“专业”表表上创建一个DELETE触发器“TRG2”。当发生删除操作时,将

给出警告、列出删除的记录并撤消删除。

3.在“专业”表表上创建一个UPDA TE触发器“TRG3”。当发生更新“专业名称”

字段的操作时,给出警告并撤消更新。

if exists(select name from sysobjects

where name='trg3' and type='tr')

drop trigger trg3

go

create trigger trg3 on 专业

for update

as

if update(专业名称)

begin

print '不允许更新专业名称!'

rollback transaction

end

else

print '没有更新专业名称,不需要触发器处理'

go

update 专业set 专业名称='新专业A' where 专业名称='新专业'

4.在“学生基本信息”表上创建一个更新触发器“TRG4”,当发生更新“学号”

或“姓名”字段的操作时给出警告,并撤消更新。

drop trigger trg4

go

create trigger trg4 on 学生基本信息

for update

as

if update(学号) or update(姓名)

begin

print '不允许更新学号或姓名'

rollback transaction

end

else

print'没有更新学号或姓名,不需要触发器处理'

go

update 学生基本信息set 学号='2002090261' where 学号='2002090161'

GO

update 学生基本信息set 姓名='张三' where 学号='2002090161'

5.创建一个视图view1,view1中包含了某班级的学生基本信息的以下字段:学

号;姓名;性别;出生日期。现在要通过该视图向该班级添加新的学生信息,在该视图上创建一个INSTEAD OF触发器“TRG5”,使得添加到“学生基本信息”表中的记录内容完整。

create view view1

as

select 学号,姓名,性别,出生日期

from 学生基本信息

go

if exists(select name from sysobjects

where name='trg5'and type='tr')

drop trigger trg5

go

相关文档
最新文档