实验八T-SQL的使用

实验六   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'

数据库实验就此结束,就最后的课程设计了 。

 

 

 

 

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页