SQL Server 实用教程(第三版)实验七答案_第1页
SQL Server 实用教程(第三版)实验七答案_第2页
SQL Server 实用教程(第三版)实验七答案_第3页
SQL Server 实用教程(第三版)实验七答案_第4页
SQL Server 实用教程(第三版)实验七答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、200901501116 刘玉佩存储过程和触发器的使用(1) 存储过程1. 创建存储过程,使用employees表中的员工人数来初始化一个局部变量,并调用这个存储过程create proc test number1 int outputas begindeclare number2 intset number2=(select count(*) from employees)set number1=number2endgodeclare num intexec test num outputselect num2. 创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否者输出1cre

2、ate proc compa id1 char(6),id2 char(6),bj int outputas begindeclare sr1 float,sr2 floatselect sr1=income-outcome from salary where employeeid=id1select sr2=income-outcome from salary where employeeid=id2if id1id2 set bj=0else set bj=1enddeclare bj intexec compa 000001,108991,bj outputselect bj3. 创建添

3、加职员记录的储存过程employeeaddcreate proc employeeadd(employeeid char(6),name char(10),education char(4),birthday datetime, workyear tinyint,sex bit,address char(40),phonenumber char(12),departmentid char(3)as begininsert into employeesvalues(employeeid,name,education,birthday,workyear, sex,address,phonenumb

4、er,departmentid)endgoexec employeeadd990230,刘超,本科,840909,2,1,武汉,85465213,3创建一个带有output游标参数的存储过程,在employees表中生命并打开一个游标create proc em_cursor em_cursor cursor varying outputasbeginset em_cursor=cursor forward_only static forselect * from employeesopen em_cursorendgodeclare mycursor cursorexec em_cursor

5、 em_cursor=mycursor outputfetch next from mycursorwhile(fetch_status=0)begin fetch next from mycursorendclose mycursordeallocate mycursorgo创建存储过程,使用游标确定一个员工的实际收入是否排在前三位。结果为1表示是,结果为0表示否create proc top_three em_id char(6),ok bit outputasbegindeclare x_em_id char(6)declare act_in int,seq intdeclare sal

6、ary_dis cursor for select employeeid,income-outcome from salary order by income-outcome descset seq=0set ok=0open salary_disfetch salary_dis into x_em_id,act_in while seq6update employeesset departmentid=3where employeeid=emendgoexec yg 000001创建存储过程,根据每个员工的学历将收入提高500元create proc sa_in edu char(4)asb

7、eginupdate salaryset income=income+500from salary,employeeswhere employees.employeeid=salary.employeeid and education=eduendselect incomefrom salary,employeeswhere salary.employeeid=employees.employeeid and education=本科goexec sa_in 本科goselect incomefrom salary,employeeswhere salary.employeeid=employ

8、ees.employeeid and education=本科创建存储过程,使用游标计算本科及以上学历的员工在总员工人数中所占比例使用命令的方式修改存储过程的定义(2) 触发器1. 向employees表插入或修改一个记录时,通过触发器检查记录的departmentid值在departments表中是否存在,若不存在,则取消插入或修改操作create trigger departmentsupdate on dbo.departmentsfor insert,updateasbeginif(select departmentid from inserted)not in(select depa

9、rtmentid from departments)rollbackendupdate employeesset departmentid=8where employeeid=0000012. 修改departments表“departmentid”字段的值,该字段在employees表中的对应值也做相应的修改create trigger departmentsupdate on dbo.departmentsfor updateasbeginupdate employeesset departmentid=(select departmentid from inserted)where de

10、partmentid=(select departmentid from deleted)end3. 删除departments表中记录的同时删除该记录“departmentid”字段值在employees表中对应的记录create trigger departmentddelete on departmentsfor deleteas begindelete from employeeswhere departmentid=(select departmentid from deleted)enddelete from departmentswhere departmentid=34. 创建

11、inserted of触发器,当向salary表中插入记录时,先检查employeeid列上的值在employees中是否存在,如果存在则执行操作,如果不存在则提示“员工号不存在”create trigger em_exists on salaryinstead of insertasbegindeclare employeeid char(6)select employeeid=(select employeeid from inserted)if(employeeid in(select employeeid from employees)insert into salaryselect

12、* from insertedelseprint员工号不存在endinsert into salaryvalues(000005,1000,800)5. 创建ddl触发器,当删除yggl数据库的一个表时,提示“不能删除表”,并回滚删除表的操作create trigger table_deleteon databaseafter drop_tableasprint不能删除该表rollback transactiongodrop table employees对于yggl数据库,表employees的employeeid列与表salary的employeeid列应该满足参照的完整性规则,请用触发器

13、实现两个表的参照完整性create trigger salaryins on salaryfor insert,updateasbeginif(select employeeid from inserted) not in(select employeeid from employees)rollbackendcreate trigger employeesupdate on dbo.employeesfor updateasbeginupdate salaryset employeeid=(select employeeid from inserted)where employeeid=(s

14、elect employeeid from deleted)endcreate trigger employeesdelete on employeesfor deleteasbegindelete from salarywhere employeeid=(select employeeid from deleted)endinsert into salaryvalues (000005,2000,1000)update employeesset employeeid=000006where employeeid=020010delete from employeeswhere employe

15、eid=000006当修改表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 employeei

16、d in(select employeeid from inserted)endupdate employeesset workyear=12where employeeid=000001创建update触发器,当salary表中income值增加500时,outcome值增加50create trigger sa_income on salaryfor updateasbeginif(select income from inserted)-(select income from deleted)=500)update salaryset outcome=outcome+50where em

17、ployeeid=(select employeeid from inserted)endselect income,outcomefrom salarywhere employeeid=000001update salaryset income=income+500where employeeid=000001select income,outcomefrom salarywhere employeeid=000001创建instead of触发器,实现向不可更新视图插入数据create view a_viewasselect employees.employeeid,name,workye

18、ar,income,outcomefrom employees,salarywhere employees.employeeid=salary.employeeidgocreate trigger gxston a_viewinstead of insertasbegindeclare ei char(6),name char(10),wy tinyint,ic float,oc floatselect ei=employeeid,name=name,wy=workyear,ic=income,oc=outcome from insertedinsert into employees(employeeid,name,workyear) values(ei,name,wy)insert into salary values(ei,ic,oc)endinsert into a_viewvalues(00001

温馨提示

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

评论

0/150

提交评论