创建触发器

例1、在student表上创建一个触发器,向student表中插入或删除数据时,输出插入或删除行的学生学号(sno)和学生姓名(sname)

create trigger tr_student_1 on student
for insert, delete
as
begin
    if not exists (select * from deleted)
        select sno,sname from inserted
    else
        select sno,sname from deleted;
end

例2、为score表建立一个名为tr_CheckGrade的触发器,其作用是修改课程成绩时,检查输入的成绩是否在有效的0~100的范围内

create trigger tr_CheckGrade
  on score
  for update 
as
  begin
    declare @cj int
    select @cj=inserted.grade from inserted
    if (@cj<0 or @cj>100)
    begin
      raiserror ('成绩的取值必须在0到100之间', 16, 1)
      rollback transaction
    end
  end

例3、为课程表course建立一个名为tr_DelCourse的触发器,其作用是当删除课程表中的记录时,同时删除修课表score中与该课程编号相关的记录

create trigger  tr_DelCourse
    on course
    for delete 
   as
delete score 
  where cno 
  in (select cno from deleted)

例4、创建触发器tr_InsertID,向表score插入数据时,检查学号是否存在于表student中,如存在则进行插入操作,否则就不插入,假设选修全部课程

create trigger  tr_InsertID
  on score
  instead of insert 
  as  
  if not exists(select * from student where sno=(select sno from inserted))   
     begin  
       rollback transaction  
     end  
  else  
    begin  
       insert into score(sno,cno)
          select (select sno from inserted), cno from course    
    end

猜你喜欢

转载自blog.csdn.net/sinat_37676560/article/details/80874833
今日推荐