zoukankan      html  css  js  c++  java
  • 触发器

    --1.在数据库studentcourse中创建存储过程。存储过程名为proc_1,
    
    if exists(select name from sysobjects where
    name='proc_1' and type='p')
    drop procedure proc_1
    go
    create proc proc_1
    @stsno varchar(6)
    as
    select s.学号,s.姓名,s.性别,SC.成绩,SC.课程号,c.课程名 from s 
    ,sc,c where s.学号=@stsno and SC.学号=s.学号 and SC.课程号=c.课程号
    go
    execute proc_1 J0401
    
    --2.在数据库studentcourse中创建存储过程,存储过程名为proc_2,
    
    
    if exists (select name from sysobjects where
    name='proc_2' and type='p')
    drop procedure proc_2
    go
    create proc proc_2
    @cno varchar(10)
    as 
    select c.课程号,c.课程名,s.学号,s.姓名,s.系,
    s.性别 from s,c,sc where s.学号=SC.学号 and 
    SC.课程号=c.课程号 and c.课程号=@cno
    go
    execute proc_2 c01
    
    --3.在数据库studentcourse中创建触发器,触发器名为trigger_1,
    
    
    if exists (select name from sysobjects where
    name='trigger_1' and type='tr')
    drop trigger trigger_1
    go
    create trigger trigger_1
    on c after insert,update,delete
    as begin
       print ('课程表被修改了')
      end
    go
    
    update c set c.学分=5 where c.课程号='c03'
    
    --4.在数据库studentcourse中创建触发器,触发器名为trigger_2,
    
    if exists (select name from sysobjects where
    name='trigger_2' and type='tr')
    drop trigger tirgger_2
    go
    create trigger trigger_2
    on c 
    after delete
    as begin
      declare @cno char(7)
      select @cno=deleted.课程号 from deleted
      delete sc where sc.课程号=@cno
      end
      go
      --5.在数据库studentcourse中创建触发器,触发器名为trigger_3
      if exists (select name from sysobjects where 
      name='trigger_3' and type='tr')
        drop trigger trigger_3
        go 
        create trigger trigger_3
        on c
        after update
        as begin
          update sc
          set 课程号=(select 课程号 from sc)
          where 课程号 in(select 课程号 from c)
         end
     6.创建向课程数据表C添加新记录的存储过程cadd。
     if exists(select name from sysobjects where
    name='cadd' and type='p')
    drop procedure cadd
    go
     create procedure cadd
     @cno char(3),@cname varchar(20),
     @socre smallint,@prcno char(3),
     @teacher char(8)
     as 
        begin
        insert into C(课程号,课程名,学分,预选课程号,教师)values(@cno,
        @cname,@socre,
        @prcno,@teacher)
        end
        go
    
    exec cadd 'C06','C#',7,'C01','黎明'    
     select * from c 
     
     7.创建修z丈课程数据表C扒L录的存储过程cupdate
      if exists(select name from sysobjects where
    name='cupdate' and type='p')
    drop procedure cupdate
    go
    create procedure cupdate
     @cno char(3),@cname varchar(20),
     @socre smallint,@prcno char(3),
     @teacher char(8)
      as begin
      update c set 课程号=@cno,
      课程名=@cname,学分=@socre,
      预选课程号=@prcno,教师=@teacher
      end
      go
      
      8. 创建存储过程cdeleted,要求删除课程数据表C中指定课
      程号的记录。
     if exists(select name from sysobjects where
    name='cdeleted' and type='p')
    drop procedure cdeleted
    go
    create procedure cdeleted
    @cno char(3)
    as begin 
       delete from c where c.课程号=@cno
       end
       go
    9.创建存储过程avgc,查询指定课程的平均成绩,
    如果平均成绩大于80分,则返回状态代码1;否则,返回状态代码2。
    if exists(select name from sysobjects where
    name='avgc' and type='p')
    drop procedure avgc
    go
    create procedure avgc
    @cno char(3),@back smallint output
    as begin
       select @back=AVG(SC.成绩) from SC 
       where SC.课程号=@cno
       if(@back>80)
          return 1
       else 
          return 2
       end
       go
      
      exec avgc c01,1
       10.显示存储过程cupdate的参数,数据类型.
       存储过程源代码和存储过程相关的数据库对象。
       
       
       sp_help 'cupdate'
       
       11.在数据库studentcourse中建立一个名为LOOK_g的存储
       过程,用于检索指定课程不及格的学生的姓名与学号。
       
       if exists(select name from sysobjects where
    name='LOOK_g' and type='p')
    drop procedure avgc
    go
    create procedure LOOK_g
    @cno char(6)
    as begin
      if exists(select s.姓名,s.学号 from
      s,SC where s.学号=SC.学号 and SC.成绩<60)
        select s.姓名,s.学号 from s,SC
        where s.学号=SC.学号 and SC.成绩<60
        else 
          print '没有不及格学生'
          end
    
       12.将存储过程cupdate的名称改为course_update,
       删除LOOK_g存储过程。
       sp_rename cupdate,course_update
       go
       drop procedure LOOK_g
       
       13. 定义一个存储过程,查询数据库中指定同学各门功课的
       成绩。显示时按照课程号顺序显示。
       create procedure LOOK
       @name char(6)
       as begin
       select s.姓名,c.课程号,SC.成绩 from SC,s,c
       where s.学号=SC.学号 and SC.课程号=c.课程号 and
       s.姓名=@name
       group by c.课程号,s.姓名,SC.成绩
       end
       
       go
       
       exec lOOK @name='李丽'
    14.在学生选课数据库中,建立触发器c1_trigger,当向
    学生选课数据表SC中添加一条记录时,要求新记录的课程号值在
    课程数据表C中存在,如果不存在,则拒绝向
    学生选课数据表SC添加这条记录。
    
    create trigger c1_trigger
    on sc after insert
    as begin
       if(select count(*)from inserted join c on inserted.课程号=c.课程号)=0
         begin
           rollback tran
           print '插入无效'
         end
         
        end
     15.在学生选课数据库中,建立触发器c2_trigger,
     修改课程数据表C中的课程号的值,该字段在学生选课数据表
     SC中的值也相应修改。
        create trigger c2_trigger
        on c after update
        as begin
          update sc
          set 课程号=(select 课程号 from inserted 
          where 课程号 in(select 课程号 from deleted))
        end
        go
     16.在学生选课数据库中,建立触发器c3_trigger,删除课程
     数据表C中的一条记录,如果该条记录的课程号值在学生选课数
     据表SC中存在,则不允许删除;否则可以删除。
       create trigger c3_trigger
       on c for delete
       as begin
         if exists (select * from deleted c where
         c.课程号 in(select sc.课程号 from sc))
         begin
           raiserror('不可删除',16,1)
          end
        end
        
        17.删除c3_trigger触发器。
        drop trigger c3_trigger      
        
       18. 创建一触发器c4_trigger,如果修改、删除和插入学生选
       课数据表SC中的任何数据
       ,则将向客户显示一条信息“不得对数据表进行任何修改!”
       If exists(select name from sysobjects 
       where name='c4_trigger' and type='tr')
       drop trigger c4_trigger
       go
       create trigger c4_trigger
       on sc for insert,update,delete
       as begin
          raiserror('不得对数据表进行任何修改',16,10)
      end   
    

      

  • 相关阅读:
    转载:USB1.1与USB2.0接口区别及识别
    漏洞利用
    ftp命令及登录
    转贴:厉害的BHO
    ip地址祥解
    windows xp最基本启动项目
    转载:小小技巧
    光驱能否刻录的查看方式
    转载:鲜为人知的Windows“插件”MSI
    转载:日常保健
  • 原文地址:https://www.cnblogs.com/kuugachen/p/3394662.html
Copyright © 2011-2022 走看看