实验八

来源:初二 发布时间:2020-07-24 点击:

实 验 报 告 课程名称:
SQL Server 数据库基础 任课教师:
池宗琳 实验名称:
存储过程 年级、专业:
2018级电子信息工程 学 号:
20181060093 姓 名:
马 信 日期:
2019 年 11 月 28 日 云南大学 信息学院 一、实验目的 1、掌握使用SELECT语句实现对数据库的简单查询 2、掌握使用SELECT语句实现对数据库的多表链接查询和子查询 二、 实验内容、方法、步骤、结果与分析 完成以下各题功能,保存或记录实现各题功能的Transact-SQL语句。

1. 在数据库HrSystem中创建存储过程avg. _wage, 用于求所有员工的平均工资,并通过输出参数返回该平均工资。要求在创建存储过程之前要首先判断该存储过程是否已经存在,如果存在,则将其删除。

USE Hrsystem GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'avg_wage') DROP PROC avg_wage GO CREATE PROC avg_wage @AVWAGE AS FLOAT AS SELECT @AVWAGE = AVG(Wage) FROM Employees PRINT @AVWAGE GO 2. 执行第1题创建的存储过程avg_ wage,打印员工平均工资。

USE Hrsystem GO DECLARE @avg AS FLOAT EXEC avg_wage @avg 3. 在数据库HrSystem中创建存储过程max_ wage,根据指定的部门名称(输人参数)返回该部门的最高工资(输出参数)。要求在创建存储过程之前要首先判断该存储过程是否已经存在,如果存在,则将其删除。

USE Hrsystem GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'max_wage') DROP PROC avg_wage GO CREATE PROC max_wage @Dename varchar(20), @MAX_wage FLOAT OUTPUT AS SELECT @MAX_wage = MAX(Wage) FROM Employees WHERE Dep_id IN(SELECT Dep_id FROM Departments WHERE Dep_name = @Dename) GROUP BY Dep_id 4.执行第3题创建的存储过程max wage, 指定部门为“财务部”,打印该类部门的最高工资。

USE Hrsystem GO DECLARE @MAX_wage FLOAT EXEC max_wage '财务部',@MAX_wage OUTPUT PRINT @MAX_wage 5. 删除存储过程avg_ wage和I max_ wage。

USE Hrsystem GO DROP PROCEDURE max_wage GO DROP PROCEDURE avg_wage (二) 触发器 创建一个“学生信息”数据库,包含“学生基本信息”表、“专业”表和“系”表,各表包含的字段如下。

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

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

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

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

以下操作要求全部在SQL Server Management Studio 中完成,保存或记录实现各题功能的Transcat-SQL语句( 包括测试相应触发器是否生效的相关语句及测试结果)。

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

USE 学生信息 GO CREATE TRIGGER TRG1 ON 专业 FOR INSERT AS DECLARE @depid INT DECLARE @depname varchar(50) DECLARE @number INT SELECT @depid = 专业编号 FROM inserted SELECT @number = 系编号 FROM inserted SELECT @depname = 专业名称 FROM inserted PRINT('系名:'+STR(@depid)+'专业名:'+STR(@depname)+'系的编号:'+str(@number)) INSERT INTO 专业 (专业编号,专业名称,系编号) VALUES(@depid,@depname,@number) 2. 在“专业”表上创建一个DELETE触发器“TRG2”, 当发生删除操作时,将给出警告、列出删除的记录并撤销删除。

USE 学生信息 GO CREATE TRIGGER TRG2 ON 专业 FOR DELETE AS PRINT('警告!禁止删除') ROLLBACK TRANSACTION 3. 在“专业”表上创建一个UPDTAE触发器“TRG3”, 当发生更新“专业名称”字段的操作时,给出警告并撤销更新 USE 学生信息 GO CREATE TRIGGER TRG3 ON 专业 FOR UPDATE AS DECLARE @temp_proid INT DECLARE @temp_xiid INT DECLARE @temp_porna varchar(50) SELECT @temp_porna = 专业名称 FROM inserted IF @temp_porna IS not NULL BEGIN PRINT('禁止修改专业名称') ROLLBACK TRANSACTION END ELSE BEGIN SELECT @temp_porna = 专业名称 FROM deleted SELECT @temp_xiid = 系编号 FROM deleted SELECT @temp_proid = 专业编号 FROM deleted UPDATE 专业 SET 专业编号 = @temp_proid, 系编号 = @temp_xiid WHERE 专业名称 = @temp_porna END 4. 在“学生基本信息”表上创建一 一个更新触发器“TRG4“, 当发生更新“学号”或“姓名”字段的操作时给出警告,并撤销更新。

USE 学生信息 GO CREATE TRIGGER TRG4 ON 学生基本信息 FOR UPDATE AS DECLARE @temp_stunum char(11) DECLARE @temp_name char(10) DECLARE @temp_gender BIT DECLARE @temp_class varchar(10) DECLARE @temp_date DATETIME DECLARE @temp_proID INT SELECT @temp_name = 姓名 FROM inserted SELECT @temp_stunum = 学号 FROM inserted IF @temp_name IS NOT NULL OR @temp_stunum IS NOT NULL BEGIN PRINT('禁止修改学号或者姓名') ROLLBACK TRANSACTION END ELSE BEGIN SELECT @temp_stunum = 学号 FROM deleted SELECT @temp_name = 姓名 FROM deleted SELECT @temp_gender = 性别 FROM inserted SELECT @temp_class = 班级 FROM inserted SELECT @temp_date = 出生日期 FROM inserted SELECT @temp_proID = 专业编号 FROM inserted UPDATE 学生基本信息 SET 性别 = @temp_gender ,班级 = @temp_class , 出生日期 = @temp_date ,专业编号 = @temp_proID WHERE 学号 = @temp_stunum END 5. 删除以 上各题创建的所有触发器。做好“学生信息”数据库的备份,以备第10章、第章上机操作时使用。

USE 学生信息 GO DROP TRIGGER TRG1 DROP TRIGGER TRG2 DROP TRIGGER TRG3 DROP TRIGGER TRG4 三、实验小结【对自己而言,通过实验学到的关键技术方法】 掌握了触发器的一些基本方法:
1. 创建触发器 2. 分清了触发器的种类,但是还是需要深入了解dml触发器中三个种类触发器的不同。

3. 了解了触发器在我们实际操作中的作用 4.

推荐访问:实验八:T-SQL编程 实验八溶液表面张力测定问答题答案 实验八聚丙烯酰胺凝胶电泳法(PAGE) 实验八集成运算放大器的基本应用--电压比 实验八利用Wireshark分析DNS 实验八木材含水率、干缩性和气干密度的测 实验八__糖尿病食谱编制 实验八、减速器的拆装及其轴系的结构分析 实验八综合设计--电子温度计 实验八非线性控制系统分析
上一篇:实验六
下一篇:推进“三点半课堂”经验做法

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有