数据库实验 实验七 存储过程与触发器
注:此内容仅仅只是记录成长与分享学习,不能保证绝对正确
实验七 存储过程与触发器
实验日期: 2022 年 5 月 20 日 星期 五 实验地点: 宿舍
一 实验目的
1. 掌握SQL Server中存储过程的创建和执行方法。
2. 理解触发器的功能,学会创建触发器,维护数据库完整性。
二 实验要求
1. 请大家务必动手完成实验,实验过程中,会随机抽查提问,作为实验成绩重要参考。
2. 请将数据库studb的两个基本文件自行保留,下次实验在此基础上进行。
3. 请在本实验报告指定方框认真填写对应的实验代码或实验结果。
三 实验内容
1. 创建用户存储过程,使用存储过程。
2. 创建触发器。
四 实验步骤
附加前述数据库,按下述要求完成实验:
1. 执行常见的系统存储过程
在命令窗口依次执行如下SQL命令:EXEC sp_databases;EXEC sp_tables;EXEC sp_columns S(查询当前数据库studb中数据表S的列的信息);EXEC sp_help S(查看数据表S的信息)。系统存储过程可通过图7.1方式查询,可自行练习执行其他的系统存储过程。
图7.1 系统存储过程
2. 通过SQL命令创建存储过程
1)创建不带参数的简单存储过程(get_S),该存储过程的功能是查询所有学生信息。完善并执行下述SQL命令。
CREATE PROCEDURE get_S
AS
SELECT * FROM S ;
创建好存储过程get_S之后,执行该存储过程的SQL命令为:
get_S; |
2)创建带参数的存储过程(get_sc_name),该存储过程根据提供的学号、课程号,返回相应的学生姓名、课程名。完善并执行下述SQL命令:
CREATE PROCEDURE get_sc_name
@sno char(6),
@cno char(2),
@sname char(8) output ,
@cname varchar(24) output
AS
SELECT @sname=SNAME,@cname=CNAME
FROM S,C,SC
WHERE S.SNO=SC.SNO AND C.CNO=SC.CNO AND SC.SNO=@sno AND SC.CNO
=@cno ;
创建好存储过程get_sc_name之后,以学号'S1',课程号'C3'为参数,执行该存储过程的SQL命令为:
DECLARE @sname char(8),
@cname varchar(24)
EXEC get_sc_name 'S1','C3',@sname output ,@cname output ;
执行存储过程get_sc_name之后,通过SELECT显示执行结果:
SELECT @sname,@cname;
3. 通过SQL命令创建触发器
1)为数据表S创建一个名为Trig_S的触发器,将删除的学生数据备份到学生存档表SBACK中。
第一步,在studb数据表中创建一个与学生表S结构完全相同的学生备份表SBACK。
第二步,在S表中任意添加一个学生信息。
第三步,创建数据表S的触发器Trig_S:
CREATE TRIGGER Trig_S ON S
FOR DELETE
AS
INSERT INTO SBACK
SELECT * FROM deleted ;
第四步,删除第二步添加的学生信息,删除后查看数据表SBACK中是否已经备份了刚刚删除的学生信息。
2)为数据表SC创建一个名为Trig_SC_UPDATE_SCORE的触发器,在修改成绩表(SC)的成绩SCORE时,要求修改后的成绩一定不低于修改前的成绩(即临时表inserted中SCORE字段值大于等于临时表deleted中字段SCORE的值),否则回滚(ROLLBACK TRANSACTION)更新操作。完善并执行下页SQL命令。然后通过更新SC中的SCORE数值进行验证,可以看出,当更新后的SCORE不低于更新之前的SCORE时,能顺利通过,否则更新失败。
CREATE TRIGGER Trig_SC_UPDATE_SCORE ON SC
FOR UPDATE
AS
IF
(
SELECT COUNT(*) FROM inserted , deleted
WHERE inserted.SCORE<deleted.SCORE
)>0
ROLLBACK TRANSACTION
五 自选动作
请在下框填写除了上述实验内容之外自选的实验内容:
创建AFTER触发器Trig_SC_INSERT_SCORE,实现在SC表中添加的成绩必须大于等于60,否则添加失败,回滚插入操作。 CREATE TRIGGER Trig_SC_INSERT_SCORE ON SC FOR INSERT AS IF( SELECT SCORE FROM inserted )<60 ROLLBACK TRANSACTION 测试: insert SC values('S0','C0',59) 结果为: 事务在触发器中结束。批处理已中止。 |
六 实验总结
在做触发器实验的时候,我还不知道表inserted和deleted的存在,然后就一直在想,触发器是for类型的,也就是先进行删除,然后才进行备份,我想着不对劲啊,都先删除了还怎么备份啊,尝试了很久没有结果,也在百度上找了一下,都没有发现有deleted这张表的存在,最后无奈放弃了,跳过此题,开始读下一题,结果一读到括号里的内容瞬间就明白了,原来我是我露了一个知识点。 后来在自选实验我还想尝试,假设不用表deleted,FOR类型也不改,能不能做出来,网上查了触发器创建所有方式后发现其实也是可以的,只不过需要在触发器名字和 ON之间插入部分语句 BEFORE DELETE 然后其他的就可以实现了。 |
成绩
数据库实验 实验七 存储过程与触发器相关推荐
- 存储过程及触发器的实验报告
实验目的:进一步了解关于存储过程和触发器的定义及实现 实验名称:存储过程.触发器的定义以及验证 实验内容:完成以下关于存储过程和触发器的定义以及验证. 1.[例7.50] 输入某个同学的学号,统计该同 ...
- 数据库实验系列之3存储过程和触发器实验(存储过程和触发器)
存储过程和触发器实验(存储过程和触发器) 实验9:存储过程实验 实验10:触发器实验 本文最初由security9968发布于security9968的csdn博客,禁止任何形式的剽窃行为 转载原创文 ...
- 存储过程、触发器和用户自定义函数实验 (存储过程)
存储过程.触发器和用户自定义函数实验 实验内容一 练习教材中存储过程.触发器和用户自定义函数的例子.教材中的BookSales数据库,在群共享中,文件名为BookSales.bak. 实验内容二 针对 ...
- MYSQL学习与数据库综合实验(九)——触发器
9触发器 9.1触发器是什么 MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具.不同的是执行存储过程要使用 CALL 语句来调用,而触发器 ...
- mysql的触发器实验报告_数据库原理实验报告s11-数据库触发器的创建.doc
数据库原理实验报告s11-数据库触发器的创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计 ...
- 头歌数据库实验六:存储过程
转载于头歌数据库实验六:存储过程头歌数据库实验六:存储过程 - Yenshthen研学绅头歌数据库实验六:存储过程 第1关:增加供应商相关列sqty use demo;#代码开始 #在S表中增加一列供 ...
- MYSQL学习与数据库综合实验(八)——存储过程实验
8.存储过程实验 8.1存储过程定义 存储过程是一组为了完成特定功能的 SQL 语句集合.使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后 ...
- 【数据库原理实验(openGauss)】实验报告
<数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...
- 《数据库原理实验指导书》
<数据库原理实验指导书> 河南科技大学软件学院 目录 实验规则 基本实验方法 实验环境 实验一 数据定义 实验二 数据更新 实验三 数据查询-简单查询和连接查询 实验四 数据查询-分组查询 ...
最新文章
- JavaScript面向对象怎样删除标签页?
- 开发日记-20190821 关键词 读书笔记《掌控习惯》DAY 1
- C#数组按值和按引用传递数组区别
- Codeforces Hello 2018!C
- 深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天
- posix多线程有感--API
- 科大星云诗社动态20210223
- Android开发之使用Android studio进行两个项目合并的方法
- 2007高考:考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业
- 如何通过 C# 判断某个 IP 是否属于某IP段?
- SQL优化:你真的知道国家字符集的性能影响吗?
- java微信小程序解密AES/CBC/PKCS7Padding
- lisp语言代替python_Lisp 语言优点那么多,为什么国内很少运用?
- paip. 定时 关机 休眠 的总结
- 基于 Elasticsearch 存储的HBase二级索引方案
- 什么是车辆识别代码(VIN)
- 企业微信服务商第三方应用开发流程
- 计算机组装流程是什么,组装电脑的步骤
- PL2303HXD驱动
- 程序员的小情诗,记录我们爱的轨迹
热门文章
- 【自控原理】第三章 线性系统的时域分析法
- Java基础 — JDK和JRE的区别和环境变量配置
- selenium(java)之屏幕截图操作TakesScreenshot
- 如何c51和mdk共存兼容_keil5 MDK软件中传统C51与STM32相互兼容的方法
- 差分走线_HFSS学习笔记(2)
- 51单片机C语言code定义,51单片机数组的定义方法(code与data的作用)
- 装机秘籍:Windows10与deepin v20双系统装机(电脑小白也能看哦!!)
- C# 高级开发应用:GPS+北斗 antenna 实现精准定位 C#实现
- 常用工具箱:打开手机日志界面
- 人工智能时代已经开始