实验六 T_SQL的应用
一、实验目的:
1.掌握在SQL_SERVER2012触发器的定义和作用。
2.掌握在SQL_SERVER2012存储过程的定义和作用。
3.掌握在SQL_SERVER2012的事务定义和作用。
二、实验准备
复习课堂笔记中相关内容的介绍,设计相关程序。
三、实验内容
1.验证如下范例,并记录结果,分析各个触发器和存储过程的作用。
例1:CREATE TRIGGER tri1
ON sc
FOR insert
AS
update student setcnum=cnum+1
wherestudent.sno=(select sno from inserted where student.sno=inserted.sno)
//-----------------------------------------------------------------------------------------------------------------------------//
例2:CREATE TRIGGER tri3
ON sc
FOR update
AS
if update(sno)
begin
update student set cnum=cnum-1
where student.sno=(select sno from deletedwhere student.sno=deleted.sno)
update student set cnum=cnum+1
where student.sno=(select sno from insertedwhere student.sno=inserted.sno)
end
//-----------------------------------------------------------------------------------------------------------------------------//
例3:CREATE PROCEDURECJCXPROC AS
SELECT STUDENT.SNO,SNAME,COURSE.CNO,CNAME,GRADEFROM
STUDENT,COURSE,SC WHERESTUDENT.SNO=SC.SNO AND COURSE.CNO=SC.CNO
GO
//-----------------------------------------------------------------------------------------------------------------------------//
例4:CREATE PROCEDURECJCXPROC1 @x char(5)
AS
selectsc.sno,sname,sc.cno,cname,grade from student,course,sc where student.sno=sc.snoand course.cno=sc.cno and sc.sno=@x order by sc.cno
GO
//-----------------------------------------------------------------------------------------------------------------------------//
例5:ZZZ
end
2.创建一个存储过程,它的功能是给出一个学生的姓和名,该存储过程将显示该学生所学课程名和该课程的分数。定义该过程,并调用运行,观察结果。
3.在存储过程中使用事务操作,定义一个存储过程,该过程作用是向实验样例数据库的Student表中插入一条数据,在插入数据时验证输入的学生姓名是否重复。如果不重复,插入数据有效;否则,插入数据无效,回滚事务撤销操作。
四、实验报告内容
记录上机运行情况记录,如出错,分析原因并改正,记录下正确的命令。
code:
CREATE TRIGGER tri1 ON sc FOR insert AS update student set cnum=cnum+1 where student.sno=(select sno from inserted where student.sno=inserted.sno) CREATE TRIGGER tri3 ON sc FOR update AS if update(sno) begin update student set cnum=cnum-1 where student.sno=(select sno from deleted where student.sno=deleted.sno) update student set cnum=cnum+1 where student.sno=(select sno from inserted where student.sno=inserted.sno) end CREATE PROCEDURE CJCXPROC AS SELECT STUDENT.SNO,SNAME,COURSE.CNO,CNAME,GRADE FROM STUDENT,COURSE,SC WHERE STUDENT.SNO=SC.SNO AND COURSE.CNO=SC.CNO GO CREATE PROCEDURE CJCXPROC2 @x char(5) AS select sc.sno,sname,sc.cno,cname,grade from student,course,sc where student.sno=sc.sno and course.cno=sc.cno and sc.sno=@x order by sc.cno GO begin transaction t11 with mark 'aaa' declare @x int set @x=1 delete from student where sno='200215122' if @x=-1 begin rollback transaction t11 end else begin delete from sc where sno='200215122' commit transaction t11 END alter PROCEDURE PROC5 as DECLARE @y CHAR(10) set @y = '王敏'; select student.sno,sc.cno,grade from sc,student where sname = @y return go exec proc5 create procedure proc6 @x1 char(9),@x2 char(20),@x3 char(2),@x4 int,@x5 char(20) as begin transaction t12 with mark 'aba' insert into student values( @x1,@x2,@x3,@x4,@x5) select * from student DECLARE @x CHAR(10) select @x = count(sname) from student where sname =@x2 if @x>1 begin rollback transaction t12 select * from student end else begin commit transaction t12 select * from student End go exec proc6 '200215131','李勇22','男',20,'cs'
数据库实验就此结束,就最后的课程设计了 。