




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年乡村医生考试题库:农村居民健康管理服务规范与急救技能试题
- 2025年征信考试题库:征信市场监管创新实践与挑战试题
- 2025年物流师技能鉴定模拟试卷:物流项目管理与执行模拟题
- 2025年专升本艺术概论模拟试卷(艺术批评理论与实践)-艺术批评理论在艺术批评研究中的应用试题
- 语文园地二-2022-2023学年三年级语文下册课时练分层作业(部编版)
- 榆林职业技术学院《三维动画制作》2023-2024学年第二学期期末试卷
- 广东省肇庆市本年度(2025)小学一年级数学统编版阶段练习(下学期)试卷及答案
- 外贸单证考试试题及答案
- 粤牌考试试题及答案
- 公务员送分面试题及答案
- 河北省唐山市、廊坊市2025届高三第二次模拟演练语文试卷(含答案)
- 民法典知识竞赛课件
- 绞车工考试题及答案
- 2025年度“基层法治建设年”活动实施方案
- 学校广告公司合同协议
- MOOC 大学英语听说译-河南理工大学 中国大学慕课答案
- 外科学试题库及答案(共1000题)
- 2022年本科教学工作合格评估整改工作方案
- 广东省建设工程造价咨询服务收费项目和收费标准表[粤价函(2011)742号]
- 小学二年级三位数竖式计算800题
- DL/T 5203-2005《火力发电厂煤和制粉系统防爆设计技术规程》简介
评论
0/150
提交评论