视图 存储过程 触发器等的建立与维护_视图存储过程答案
视图 存储过程 触发器等的建立与维护由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“视图存储过程答案”。
内蒙古工业大学信息工程学院
实 验 报 告
课程名称: 数据库应用
实验名称:视图 存储过程 触发器等的建立与维护 实验类型: 验证性□ 综合性□ 设计性□
实验室名称:
同组人:
成绩:
实验日期: 2011年6月
实验四 视图、存储过程、触发器等的建立与维护
(一)实验目的1.学会使用企业管理器建立视图,应用视图插入、删除、修改数据; 2.掌握存储过程的使用方法; 3.掌握触发器的使用方法。(二)实验环境
装有SQL server 2005软件的计算机。(三)实验内容
1.视图插入、删除、修改数据; 2.创建存储过程,调用存储过程; 3.创建触发器。(四)实验要求
1.利用所创建的数据库和数据表,综合应用视图、存储过程、触发器等知识完善数据库;
2.掌握应用更新视图数据可以修改基本表数据的方法; 3.熟练掌握添加、修改、删除记录的存储过程的定义及调用; 4.掌握通过触发器来实现数据的参照完整性。(五)实验步骤
利用员工管理数据库YGGL中 3个表:
Employees:员工自然信息表、Departments:部门信息表、Salary:员工薪水情况表。(1)利用YGGL各表建立视图实现各种连接查询。建立视图view1,查询所有职工的员工编号、姓名、部门名和收入,并按部门名顺序排列。建立视图view2,查询所有职工的员工编号、姓名和平均工资。建立视图view3,查询各部门名和该部门的所有职工平均工资。
(2)编写对YGGL各表进行插入、修改、删除操作的存储过程,然后编写程序,调用这些存储过程。创建一个为Employees表添加员工记录的存储过程addEmployees。创建一个存储过程delEmployees删除Employees表中指定员工编号的记录。
(3)对于YGGL数据库,请用触发器实现两个表间的参照完整性。在表Departments上创建一个触发器Departments _update,当更改部门编号时同步更改Employees表中对应的部门编号。在表Employees上创建一个触发器Employees _delete,当删除员工记录时同步删除salary表中对应的工资收入记录。
(六)实验结果
1、视图一
2、视图二
3、视图三
4、添加职员记录的存储过程EmployeeAdd5、修改职员记录的存储过程EmployeeUpdate:
6、删除职员记录的存储过程EmployeeDelete:
8、调用存储过程
(1)执行ADD存储过程
(2)执行UPDATE存储过程
(3)执行DELETE存储过程
9.触发器
①向Employees表插入或修改1条记录时,通过触发器检查记录的DepartmentID值在Departments表是否存在,若不存在,则取消插入或修改操作。
②修改Departments表departmentID字段值时,该字段在Employees表中的对应值也进行相应修改。
③删除Departments表中1条记录的同时删除该记录departmentlD字段值在Employees表中对应的记录。
(七)实验代码
1、创建视图 USE YGGL GO CREATE VIEW VIEW_1 AS SELECT Employees.employeeid,name,departmentname,income From Employees,departments,salary Group by departmentname,Employees.employeeid,name,income GO2、存储过程(1)添加职员记录的存储过程EmployeeAdd: USE YGGL GO CREATE PROCEDURE Emplo)reeAdd(@employeeid char6),@name char(10),@birthday datetime,@sex bit,@addre char(20),@zip char(6),@phonenumber char(12),@emailaddre char(20),@departmenflD char(3))AS BEGIN INSERT INTO Employees VALUES(@employeeid,@name,@birthday,@sex,@addre,@zip,@phonenumber,@emailaddre,@departmentlD)END RETURN GO(2)修改职员记录的存储过程EmployeeUpdate:
USE YGGL GO
CREATE
PROCEDURE EmployeesUpdate
(@empid char(6),@EmployeeID char(6),@Name char(10),@birthday datetime, @sex bit,@addre char(20),@zip char(6),@phonenumber char(12), @emailaddre char(20),@departmentID char(3))
AS
BEGIN
UPDATE Employees SET
Name=@Name,Birthday=@birthday,EmployeeID=@EmployeeID,Sex=@sex,Addre=@addre,Zip=@zip,Phonenumber=@phonenumber,Emailaddree=@emailaddre,DepartmentID=@departmentID
WHERE Employeeid=@empid END RETURN GO
(3)删除职员记录的存储过程EmployeeDelete: USE YGGL GO CREATE PROCEDURE EmployeeDelete(@employeeid char(6))AS BEGIN DELETE FROM Employees WHERE Employeeid=@employeeid END RETURN G0 3.调用存储过程 USE YGGL EXEC EmployeeAdd'990230','990232','刘朝','890909' ,1,'武汉小洪山号','NULL','NULL','NULL','2' GO
USE YGGL
EXEC Employeeupdate'990230','990232','刘平','890909' ,1,'武汉小洪山号','NULL','NULL','NULL','2'
GO
USE YGGI
EXEC EmployeeDelete'990232'
GO 4.创建触发器
①向Employees表插入或修改1条记录时,通过触发器检查记录的DepartmentID值在Departments表是否存在,若不存在,则取消插入或修改操作。USE YGGL GO CREATE TRIGGER EmployeesIns on dbo.Employees FOR INSRET,UPDATE AS BEGIN IF((SELECT ins.departmentid from inserted ins)NOT IN(SELECT departmentid FROM departments))ROLLBACK /*对当前事务回滚,即恢复到插入前的状态 END ②修改Departments表departmentID字段值时,该字段在Employees表中的对应值也进行相应修改。USE YGGL GO CREATE TRIGGER DepartmentsUpdate on dbo.Departments FoR UPDATE AS BEGIN IF(COLUMNS_UPDATED()&01)>0 UPDATE Employees SET DepartmentlD=(SELECT ins.DepartmentlD from INSERTED ins)WHERE DepaxtmentlD=(SELECT DepartmentlD FROM deleted)END GO ③删除Departments表中1条记录的同时删除该记录departmentlD字段值在Employees表中对应的记录。USE YGGL GO CREATE TRIGGER DepartmentsDelete On db.Departments FOR DELETE AS BEGIN DELETE FROM Employees WHERE DepartmentlD=(SELECT DepartmentlD FROM deleted)END GO
(八)实验心得体会
本次实验获益良多,基本掌握了应用更新视图数据可以修改基本表数据的方法,熟练掌握了添加、修改、删除记录的存储过程的定义及调用以及通过触发器来实现数据的参照完整性。并且我了解到存储过程只能用在当前数据库中,在成功执行CREARE PROCEDURE 语句后,存储过程名称存储在sysobjects系统表中,而CREARE PROCEDURE语句的文本存储在syscomments中。