数据库高级技术实例存储过程触发器.docx
《数据库高级技术实例存储过程触发器.docx》由会员分享,可在线阅读,更多相关《数据库高级技术实例存储过程触发器.docx(12页珍藏版)》请在冰点文库上搜索。
数据库高级技术实例存储过程触发器
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
1、运用存储过程创建STUDENT、GRADE、COURSE表(要求实现完整性)。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
2、运用存储过程创建STUDENT、DEPARTMENT、DORM表(要求实现完整性)。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
3、运用存储过程对STUDENT、DEPARTMENT、DORM表插入一条符合完整性的记录。
(内容自己定义)
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
4、编写带参的存储过程:
实现删除‘01’课程‘数据库原理’的相关信息。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
5、编写带参的存储过程:
实现删除‘990101’学生‘原野’的相关信息。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
6、编写带参的存储过程:
实现宿舍号从‘2101’修改为‘3101’。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
7、编写带参的存储过程:
实现查询宿舍号“2505”的相关信息。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
8、运用触发器对GRADE实现插入记录“980101,08,99”(相关信息自己定义)。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
9、运用触发器对STUDENT表中的SEX实现数据范围检查,若出错,提示信息。
按照要求编写相应代码,执行结果后,并删除对象:
(以学号+题号做文件名提交:
990101_1)
10、运用触发器对STUDENT表的操作只能在工作时间:
9-15,每周一到五,实现数据安全性控制。
答案:
1、用存储过程创建STUDENT、GRADE、COURSE表(要求实现完整性)。
usestudent_data
go
ifexists(selectnamefromsysobjects
wherename='cun'andtype='P')
dropprocedurecun
go
createprocedurecun
as
begin
ifnotexists(selectnamefromsysobjects
wherename='student'andtype='U')
begin
createtablestudent
(snochar(6)NOTnullunique,
snamechar(8)notnull,
sexchar
(2),
sageint,
dnochar(4),
dormnochar(5),
constraintFK_DEPFOREIGNKEY(dno)referencesdepartment(dno),
constraintPK_studentprimarykey(sno)
)
insertintostudent
values('990101','原野','男',21,'1','2101');
end
ifnotexists(selectnamefromsysobjects
wherename='grade'andtype='U')
begin
createtablegrade
(snochar(6),
cnochar
(2),
scoreint
constraintpk_gradeprimarykey(sno,cno));
insertintograde
values('990101','01',85);
end
ifnotexists(selectnamefromsysobjects
wherename='course'andtype='U')
begin
createtablecourse
(cnochar
(2)NOTnullunique,
cnamechar(20)notnull,
cpnochar
(2),
creditint,
teacherchar(8)
constraintFK_CPforeignkey(cpno)referencesdorm(cpno),
constraintPK_COrprimarykey(cno)
)
insertintocourse
values('01','数据库原理','05',4,'王凯');
end
end
go
cun
select*fromstudent
2、运用存储过程创建STUDENT、DEPARTMENT、DORM表(要求实现完整性)。
3、运用存储过程对STUDENT、DEPARTMENT、DORM表插入一条符合完整性的记录。
(内容自己定义)
usestudent
go
ifexists(selectnamefromsysobjects
wherename='cun'andtype='P')
dropprocedurecun
go
createprocedurecun
@ssnochar(6),@ssnamechar(8),@ssexchar
(2),@ssageint,@ddnochar(4),@ddormchar(5)
@dddnochar(4),@ddnamechar(8),@hheadchar(20)
@dddornochar(5),@dddtelchar(7)
as
begin
ifnotexists(selectsnofromstudentwheresno=@ssno)
ifexists(selectdnofromdepartmentwheredno=@ddno)
Ifexists(selectdormnofromdormwheredormno=@ddorm)
insertintostudent(sno,sname,sex,sage,dno,dormno)
values(@ssno,@ssname,@ssex,@ssage,@ddno,@ddorm)
ifnotexists(selectdnofromdepartmentwheredno=@dddno)
ifnotexists(selectdnamefromdepartmentwheredname=@ddname)
insertintodepartment
values(@dddno,@ddname,@hhead)
ifnotexists(selectdormnofromdormwheredormno=@dddorno)
ifnotexists(selecttelefromdormwheretele=@dddtel)
insertintodorm
values(@dddorno,@dddtel)
end
go
usestudent
go
cun'990109','达到','男',19,'4','2404','5','地质','哈哈','6504','8306753'
select*fromstudent
select*fromdepartment
select*fromstudent
select*fromdorm
4、编写带参的存储过程:
实现删除‘01’课程‘数据库原理’的相关信息。
ifexists(selectnamefromsysobjects
wherename='del_cname'andtype='p')
dropproceduredel_cname
go
createproceduredel_cname
@cnamechar(20)
as
begin
deletegradewherecno=(selectcnofromcoursewherecname='数据库原理')
deletecoursewherecname=@cname
end
go
select*fromcourse
select*fromgrade
usestudent_data
go
del_cname'数据库原理'
go
dropproceduredel_cname
5、编写带参的存储过程:
实现删除‘990101’学生‘原野’的相关信息。
usestudent_data/*打开数据库*/
go
ifexists(selectnamefromsysobjects
wherename='del_S'andtype='p')
dropproceduredel_S
go
createproceduredel_S
@stuchar(6)
as
begin
deletegradewheresno=@stu
deletestudentwheresno=@stu
end
go
select*fromgrade
select*fromstudent
del_S'990101'
6、编写带参的存储过程:
实现宿舍号从‘2101’修改为‘3101’。
usestudent_data
ifexists(selectnamefromsysobjects
wherename='adjust_roo'andtype='P')
dropprocedureadjust_roo
go
createprocedureadjust_roo
@dormnoochar(5),@dormnoo1char(5)
as
begin
updatestudentsetdormno=@dormnoo1
wheredormno=@dormnoo
deletefromdorm
wheredormno=@dormnoo
end
go
adjust_roo'2101','3101'
go
select*fromstudent
7、编写带参的存储过程:
实现查询宿舍号“2505”的相关信息。
usestudent
go
ifexists(selectnamefromsysobjects
wherename='search_dorm'andtype='p')
dropproceduresearch_dorm
go
createproceduresearch_dorm
@dormnochar(5)
as
begin
selectdorm.*,sno,snamefromdorm,student
wherestudent.dormno=dorm.dormno
anddormno=@dormno
end
go
usestudent
exec
search_dorm'2505'
go
dropproceduresearch_dorm
8、运用触发器对GRADE实现插入记录“980101,08,99”(相关信息自己定义)。
usestudent_data
ifexists(selectnamefromsysobjects
wherename='SC'andtype='tr')
droptriggerSC
go
createtriggerSCongrade
forinsert
as
declare@Snochar(6)
declare@Cnochar
(2)
declare@msg1char(100)
declare@msg2char(100)
declare@msg3char(100)
declare@Scoreint
select@Sno=Snofrominserted
select@msg1='没有学生'
ifnotexists(select*fromstudent
wheresno=@Sno)
begin
print@msg1
rollbacktransaction
return
end
select@Cno=Cnofrominserted
select@msg2='没有课程'
ifnotexists(select*fromcourse
wherecno=@Cno)
begin
print@msg2
rollbacktransaction
return
end
select@Score=scorefrominserted
select@msg3='成绩不对'
if(@ScoreisnotNULLand(@Score<0or@Score>100))
begin
print@msg3
rollbacktransaction
end
go
insertintograde(sno,cno,score)
values('990101','01',NULL)
deletegradewheresno='990101'
9、运用触发器对STUDENT表中的SEX实现数据范围检查,若出错,提示信息。
usestudent_data
ifexists(selectnamefromsysobjects
wherename='tr_ssex'andtype='TR')
droptriggertr_ssex
go
createtriggertr_ssexonstudent
beforeupdate,insert
as
declare@msgvarchar(100)
declare@vssexchar
(2)
select@msg='数据有误,请检查后,重新输入!
'
select@vssex=sexfrominserted
if(@vssex<>'男'and@vssex<>'女')
begin
print@msg
rollbacktransaction
end
return
go
select*fromstudent
updatestudentsetsex='王'wheresno='990101'
updatestudentsetsex='女'wheresno='990101'
insertintostudent(sno,sname,sex)
values('200001','A','王')
insertintostudent(sno,sname,sex)
values('200002','B','女')
droptriggertr_ssex
sp_helptexttr_ssex
10、运用触发器对STUDENT表的操作只能在工作时间:
9-15,每周一到五,实现数据安全性控制。
usestudent
ifexists(selectnamefromsysobjects
wherename='tr_up_student'andtype='TR')
droptriggertr_up_student
go
createtriggertr_up_studentonstudent
forupdate,insert,delete
as
declare@msgvarchar(100)
select@msg='无法操作'
if(datename(weekday,getdate())like'sat'ordatename(weekday,getdate())like'sun'or
datename(hour,getdate())notbetween9and15)
BEGIN
PRINT@msg
rollback
end
go
select*fromstudent
updatestudent
setsage='30'
wheresno='990101'