实 验 报 告
课程名称: SQL Server 数库基础
课教师: 池宗琳
实验名称: 存储程
年级专业: 2018级电子信息工程
学 号: 20181060093
姓 名: 马 信
日期: 2019 年 11 月 28 日
云南学 信息学院
实验目
1掌握SELECT语句实现数库简单查询
2掌握SELECT语句实现数库表链接查询子查询
二 实验容方法步骤结果分析
完成题功保存记录实现题功TransactSQL语句
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_ wageI max_ wage
USE Hrsystem
GO
DROP PROCEDURE max_wage
GO
DROP PROCEDURE avg_wage
(二) 触发器
创建学生信息数库包含学生基信息表专业表系表表包含字段
学生基信息表学号姓名性班级出生日期专业编号
专业表专业编号专业名称系编号
系 表系编号系名称系简介
字段类型实际含义行定义输 数求数代表性
操作求全部SQL Server Management Studio 中完成保存记录实现题功TranscatSQL语句( 包括测试相应触发器否生效相关语句测试结果)
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 文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档