注:此内容仅仅只是记录成长与分享学习,不能保证绝对正确

实验七 存储过程与触发器

实验日期: 2022520 日  星期  实验地点: 宿舍

一 实验目的

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)

结果为:

事务在触发器中结束。批处理已中止。

六 实验总结

在做触发器实验的时候,我还不知道表inserteddeleted的存在,然后就一直在想,触发器是for类型的,也就是先进行删除,然后才进行备份,我想着不对劲啊,都先删除了还怎么备份啊,尝试了很久没有结果,也在百度上找了一下,都没有发现有deleted这张表的存在,最后无奈放弃了,跳过此题,开始读下一题,结果一读到括号里的内容瞬间就明白了,原来我是我露了一个知识点。

后来在自选实验我还想尝试,假设不用表deleted,FOR类型也不改,能不能做出来,网上查了触发器创建所有方式后发现其实也是可以的,只不过需要在触发器名字和 ON之间插入部分语句 BEFORE DELETE 然后其他的就可以实现了。

成绩

数据库实验 实验七 存储过程与触发器相关推荐

  1. 存储过程及触发器的实验报告

    实验目的:进一步了解关于存储过程和触发器的定义及实现 实验名称:存储过程.触发器的定义以及验证 实验内容:完成以下关于存储过程和触发器的定义以及验证. 1.[例7.50] 输入某个同学的学号,统计该同 ...

  2. 数据库实验系列之3存储过程和触发器实验(存储过程和触发器)

    存储过程和触发器实验(存储过程和触发器) 实验9:存储过程实验 实验10:触发器实验 本文最初由security9968发布于security9968的csdn博客,禁止任何形式的剽窃行为 转载原创文 ...

  3. 存储过程、触发器和用户自定义函数实验 (存储过程)

    存储过程.触发器和用户自定义函数实验 实验内容一 练习教材中存储过程.触发器和用户自定义函数的例子.教材中的BookSales数据库,在群共享中,文件名为BookSales.bak. 实验内容二 针对 ...

  4. MYSQL学习与数据库综合实验(九)——触发器

    9触发器 9.1触发器是什么 MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具.不同的是执行存储过程要使用 CALL 语句来调用,而触发器 ...

  5. mysql的触发器实验报告_数据库原理实验报告s11-数据库触发器的创建.doc

    数据库原理实验报告s11-数据库触发器的创建.doc 数据库管理系统SQLSERVER实验报告第1页2011年5月4日实验11数据库触发器的建立实验日期和时间20141128实验室软件工程室班级12计 ...

  6. 头歌数据库实验六:存储过程

    转载于头歌数据库实验六:存储过程头歌数据库实验六:存储过程 - Yenshthen研学绅头歌数据库实验六:存储过程 第1关:增加供应商相关列sqty use demo;#代码开始 #在S表中增加一列供 ...

  7. MYSQL学习与数据库综合实验(八)——存储过程实验

    8.存储过程实验 8.1存储过程定义 存储过程是一组为了完成特定功能的 SQL 语句集合.使用存储过程的目的是将常用或复杂的工作预先用 SQL 语句写好并用一个指定名称存储起来,这个过程经编译和优化后 ...

  8. 【数据库原理实验(openGauss)】实验报告

    <数据库系统原理实验>报告 文章目录 <数据库系统原理实验>报告 一.实验课程性质和教学目标 二.实验课程教学基本要求 三.实验教学内容 实验一 认识DBMS系统 (一)实验目 ...

  9. 《数据库原理实验指导书》

    <数据库原理实验指导书> 河南科技大学软件学院 目录 实验规则 基本实验方法 实验环境 实验一 数据定义 实验二 数据更新 实验三 数据查询-简单查询和连接查询 实验四 数据查询-分组查询 ...

最新文章

  1. JavaScript面向对象怎样删除标签页?
  2. 开发日记-20190821 关键词 读书笔记《掌控习惯》DAY 1
  3. C#数组按值和按引用传递数组区别
  4. Codeforces Hello 2018!C
  5. 深度学习100例-生成对抗网络(DCGAN)手写数字生成 | 第19天
  6. posix多线程有感--API
  7. 科大星云诗社动态20210223
  8. Android开发之使用Android studio进行两个项目合并的方法
  9. 2007高考:考生要根据家庭经济条件慎重填报按办学成本收费的高校及专业
  10. 如何通过 C# 判断某个 IP 是否属于某IP段?
  11. SQL优化:你真的知道国家字符集的性能影响吗?
  12. java微信小程序解密AES/CBC/PKCS7Padding
  13. lisp语言代替python_Lisp 语言优点那么多,为什么国内很少运用?
  14. paip. 定时 关机 休眠 的总结
  15. 基于 Elasticsearch 存储的HBase二级索引方案
  16. 什么是车辆识别代码(VIN)
  17. 企业微信服务商第三方应用开发流程
  18. 计算机组装流程是什么,组装电脑的步骤
  19. PL2303HXD驱动
  20. 程序员的小情诗,记录我们爱的轨迹

热门文章

  1. 【自控原理】第三章 线性系统的时域分析法
  2. Java基础 — JDK和JRE的区别和环境变量配置
  3. selenium(java)之屏幕截图操作TakesScreenshot
  4. 如何c51和mdk共存兼容_keil5 MDK软件中传统C51与STM32相互兼容的方法
  5. 差分走线_HFSS学习笔记(2)
  6. 51单片机C语言code定义,51单片机数组的定义方法(code与data的作用)
  7. 装机秘籍:Windows10与deepin v20双系统装机(电脑小白也能看哦!!)
  8. C# 高级开发应用:GPS+北斗 antenna 实现精准定位 C#实现
  9. 常用工具箱:打开手机日志界面
  10. 人工智能时代已经开始