实验八 SQL 的服务器端编程(4 学时)

--(1)
CREATE PROCEDURE myproc1 @x CHAR(5)
AS
SELECT Clno,Student.Sno,Sname,Course.Cno,Cname
   FROM Student,Course,Cj
    WHERE Student.Sno=Cj.Sno 
      AND Course.Cno=Cj.Cno and Clno = @x 
        ORDER by Cj.Sno
GO
EXEC myproc1 @x= '00311'

--(2)
ALTER TABLE Cj ADD DJ char(10)
 
CREATE PROCEDURE myproc2 
@Cname CHAR(50),
@Grade CHAR(50)
AS
UPDATE Cj SET DJ='优秀' WHERE Grade>=90 AND Grade<=100;
UPDATE Cj SET DJ='良好' WHERE Grade>=80 AND Grade<90;
UPDATE Cj SET DJ='中等' WHERE Grade>=70 AND Grade<80;
UPDATE Cj SET DJ='及格' WHERE Grade>=60 AND Grade<70;
UPDATE Cj SET DJ='不及格' WHERE Grade>=0 AND Grade<60;
SELECT count(Student.Sno)
	FROM Student,Course,Cj
	 WHERE Student.Sno = Cj.Sno
	  AND Course.Cno=Cj.Cno 
	  AND Cname = @Cname 
	  AND DJ = @Grade
GO
EXEC myproc2 @Cname= '离散数学',@Grade = '良好'

--(3)
Create PROCEDURE LX
@Sno CHAR(10),
@Sname CHAR(10),
@Ssex CHAR(10),
@Sage CHAR(10),
@Clno CHAR(10)
AS
	Begin 
		begin transaction
		declare @pd int
		insert student values(@Sno,@Sname,@Ssex,@Sage,@Clno)
		select @pd=count(Sname) from student WHERE Sname = @Sname
        if  @pd<>1
			begin  
				PRINT '有错误,回滚'        
				rollback                                 
			end             
			else  
				PRINT '成功,提交'     
				commit
     End
	
GO
--验证(3)
EXEC LX @Sno='2000112',@Sname='李勇',@Ssex='男',@Sage='22',@Clno='00312'
EXEC LX @Sno='2000111',@Sname='小明',@Ssex='男',@Sage='22',@Clno='00311'
 
delete from student where Sno = '2000111'
delete from student where Sno = '2000112'
 
select * from student
 
DROP  PROCEDURE LX

--(4)
update Class 
set Number = 2
where Clno = '00311'
 
update Class 
set Number = 3
where Clno = '01311'
 
select * from Class

-- (5)
-- 创建触发器,添加张艺
CREATE TRIGGER Tri1 ON Student FOR INSERT
     AS
     UPDATE Class SET Number = Number + 1
     WHERE class.Clno =
          (SELECT Clno FROM inserted WHERE    
                  Class.Clno=inserted.Clno) 

insert student values('2000122','张艺','男','20','00311')

-- 创建触发器,删除张艺
CREATE TRIGGER Tri2 ON Student FOR DELETE
     AS
     UPDATE Class SET Number = Number - 1
     WHERE class.Clno =
          (SELECT Clno FROM deleted WHERE    
                  Class.Clno = deleted.Clno) 

delete from student where Sno = '2000122';


-- 创建触发器Tri3,将李勇同学从00311班转入01311班
CREATE TRIGGER Tri3 ON Student FOR UPDATE  
AS
   IF UPDATE(Clno)
   BEGIN
     UPDATE Class SET Number = Number - 1
     WHERE class.Clno =
          (SELECT Clno FROM deleted WHERE    
                  Class.Clno = deleted.Clno) 
     UPDATE Class SET Number = Number + 1
     WHERE class.Clno =
          (SELECT Clno FROM inserted WHERE    
                  Class.Clno=inserted.Clno) 
   END
 
update Student
set Clno = '01311'
where Sname = '李勇';

--(6)
CREATE TRIGGER cfq3
  ON Course
  FOR DELETE
AS
  DELETE cj
    FROM cj, deleted
    WHERE cj.Cno= deleted.Cno;
 
 
CREATE TRIGGER cfq4
  ON Course
  FOR UPDATE
AS
  IF UPDATE(Cno)
  BEGIN
    UPDATE cj
      SET cj.Cno = inserted.Cno
        FROM cj, deleted, inserted
        WHERE cj.Cno = deleted.Cno
   END
 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没心没肺活百岁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值