数据库技术实验六.doc_第1页
数据库技术实验六.doc_第2页
数据库技术实验六.doc_第3页
数据库技术实验六.doc_第4页
数据库技术实验六.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程名称数据库技术实验成绩实验名称存储过程和触发器的使用学号姓名班级日期14.11.25实验目的:1. 掌握存储过程的使用方法;2. 掌握触发器的实现方法;实验平台:利用RDBMS(SQL Server 2008)及其交互查询工具(查询分析器)来操作T-SQL语言;实验内容:1. 存储过程(1) 创建存储过程,要求当一个员工的工作年份大于6年时将其转到经理办公室工作。alter procedure yuangong_infol EmployeeID char(6),name nchar(20)as begin declare year int set year=( select WorkYear from Employees where EmployeeID=EmployeeID) declare DepartmentID char(3) set DepartmentID=( select DepartmentID from Departments where DepartmentName=name) if (year6) update Employees set DepartmentID=DepartmentID where EmployeeID=EmployeeIDEndexec dbo.yuangong_infol 000000,经理办公室(2) 创建存储过程,根据每个员工的学历将收入提高500元。alter proc SA_IN enu char(6)asbeginupdate Salaryset InCome=InCome+500from Salary,Employeeswhere Employees.EmployeeID=Salary.EmployeeID and Education=enuendselect InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education=本科goexec dbo.sa_in 本科goselect InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education=本科select InComefrom Salary,Employeeswhere Salary.EmployeeID=Employees.EmployeeID and Education=本科(3) 创建存储过程,使用游标计算本科及以上学历的员工在总员工数中的比例。declare edu varchar(10), part_count int, all_count int ;declare mycursor cursor for select distinct education, COUNT(education) over(partition by education) as part_count, COUNT(education) over() as all_count from Employees open mycursorfetch next from mycursor into edu,part_count,all_count while FETCH_STATUS=0begin print edu+占总人数比例:+convert(varchar(100),convert(numeric(38,2),part_count/1.0/all_count*100)+% fetch next from mycursor into edu,part_count,all_countendclose mycusordeallocate mycursor(4) 使用命令方式修改及删除一个存储过程。if exists(select workyear from Employees where workyear=3) drop procedure workyear2. 触发器(1) 对于YGGL数据库,表Employees的Employeeid列与表Salary的Employeeid列应满足参照完整性规则,请用触发器实现两个表间的参照完整性。create trigger Salaryins0 on Salaryfor insert,update asbeginif(select employeeid from inserted) not in(select EmployeeID from Employees)rollbackendcreate trigger Employeesupdate0 on dbo.Employeesfor updateasbeginupdate Salaryset employeeid=(select employeeid from inserted)where employeeid=(select employeeid from deleted)endcreate trigger Employeesdelete0 on Employeesfor deleteasbegindelete from Salarywhere employeeid=(select employeeid from deleted)end(2)当修改表Employees时,若将Employees表中员工的工作时间增加1年,则将收入增加500,若增加2年则增加1000,依次增加。若工作时间减少则无变化。create trigger em_workyear on Employeesafter updateasbegindeclare a int,b intset a=(select workyear from inserted)set b=(select workyear from deleted)if(ab)update Salaryset income=income + (a-b)*500where enployeeid in(select EmployeesID from inserted)endupdate Employeesset workyear=12where EmployeesID=000001(3)创建UPDATE触发器,当Salary表中InCome值增加500时,outCome值则增加50。create trigger sa_income on Salaryfor update as beginif(select income from inserted)-(select income from deleted)=500)update Salary set outcome=outcome+50where enployeeid=(select enployeeid from inserted)end select income,outcomefrom Salary where enployeeid=000001(5) 创建INSTEAD OF触发器,实现向不可更新视图插入数据。create view a_viewasselect Employees.EmployeesID,name,workyear,income,outcomefrom Employees,Salarywhere Employees.EmployeesID=Salary.enployeeidgocreate trigger gxston a_viewinstead of insertasbegindeclare Ei char(6),name char(10),wy tinyint,ic float,oc floatselect Ei=EmployeesID,name=name,wy=workyear,ic=income,oc=outcomefrom insertedinsert into Employees(EmployeesID,name,workyear) values(Ei,name,wy)insert into Salary values(Ei,ic,oc) endinsert into a_viewvalues(000011,小芳,3,2000,1500)select * from a_viewwhere EmployeesID=000011(5)创建DDL触发器,当删除数据库时,提示“无法删除”并回滚删除操作。create t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论