¡¡--¢ÙÑ¡Ð޳ɼ¨±íSCTSÖУ¬Ñ§ÉúÑ¡Ð޳ɼ¨ÓÉÆ½Ê±³É¼¨(regular_grade)ºÍ¿¼ÊԳɼ¨(exam_grade)¹¹³É¿Î³Ì×ÜÆÀ³É¼¨(total_mark)£¬¹«Ê½Îª£ºtotal_mark=
regular_grade*30%+ exam_grade*70%
¡¡¡¡Éè¼ÆDML´¥·¢Æ÷£¬Ê¹µÃµ±Óû§ÐÞ¸ÄijλѧÉúÑ¡ÐÞijÃÅ¿Î³ÌµÄÆ½Ê±³É¼¨»òÕß¿¼ÊԳɼ¨Ê±£¬×Ô¶¯ÊµÏÖ¶Ô¸ÃѧÉú¸ÃÃſγÌ×ÜÆÀ³É¼¨µÄ¸üС£
Create trigger Tri_UPDATE_SCTS on SCTS after UPDATE AS BEGIN IF UPDATE(regular_grade)or UPDATE(exam_grade) BEGIN DECLARE @rgrade float; DECLARE @egrade float; select @rgrade=regular_grade,@egrade= exam_grade from inserted update SCTS set total_mark=0.3*@rgrade+0.7*@egrade from inserted where SCTS.studentid =inserted.studentid and SCTS.courseid=inserted.courseid and SCTS.teacherid =inserted.teacherid END END |
--²âÊÔ´¥·¢Æ÷
update Scts set regular_grade='100',exam_grade='100' where studentid='200520805403'and courseid='20224B0' and teacherid='080102' select *from scts where studentid='200520805403'and courseid='20224B0' and teacherid='080102' |
--2¡¢¢ÚÉè¼ÆDML´¥·¢Æ÷£¬Ê¹µÃµ±Ä³Ñ§ÉúÔÚÒ»¸öѧÆÚÖÐËùÑ¡Ð޵ĿγÌ×Üѧ·Ö³¬¹ý20ѧ·Öʱ£¬×Ô¶¯Ìáʾ¡°ÄãÑ¡ÐÞµÄ×Üѧ·ÖÒÑ´ïµ½×î´óÖµ£¬²»ÔÊÐí¼ÌÐøÑ¡¿Î£¡¡±µÄÐÅÏ¢£»
Create trigger Tri_IN_LIMIT_SCTS on SCTS after insert --×¢ÒâÕâÀïAFTERÊDzåÈëÖ®ºóµÄ AS BEGIN BEGIN DECLARE @allcredit float; DECLARE @sid varchar(12); select @sid =inserted.studentid from inserted select @allcredit=sum(credit) from courses where courseid in( select courseid from scts where studentid=@sid ) if (@allcredit>20) begin Rollback Transaction print @allcredit print'ÄãÑ¡ÐÞµÄ×Üѧ·ÖÒÑ´ïµ½×î´óÖµ£¬²»ÔÊÐí¼ÌÐøÑ¡¿Î£¡' end else print'Ñ¡¿Î³É¹¦' END END |
--²âÊÔ´¥·¢Æ÷
select sum(credit) '×Ü·Ö' from courses where courseid in( select courseid from scts where studentid='200520701201' ) insert into Scts(courseid,studentid,teacherid) values ('50103Q0','200520701201','080102'); select *from courses where courseid='10042B0' |
--3.Éè¼ÆDML´¥·¢Æ÷ÏÞ¶¨£º¶ÔÓÚ¡°×¨Òµ¡±£¨COURSES.character£¬°üÀ¨×¨Òµ¿Î¡¢×¨Òµ»ù´¡¡¢×¨ÒµÑ¡Ð޵ȣ©¿Î³Ì£¬Ö»Óиÿγ̿ª¿ÎѧԺµÄѧÉú²ÅÄÜÑ¡ÐÞ£¬·ñÔòÌáʾ¡°²»ÔÊÐí¿çԺѡ¿Î£¡¡±µÄÌáʾÐÅÏ¢¡£
Create trigger Tri_INSERT_SCTS on SCTS after insert AS BEGIN DECLARE @stype varchar(10); DECLARE @collegeid varchar(5); if exists(select * from courses AS C where C.courseid in(select courseid from inserted ) and C.Character like 'רҵ%') BEGIN select @collegeid=college from courses AS C where C.courseid in(select courseid from inserted ) if exists (select college from students AS S where S.studentid in(select studentid from inserted )and S.college=@collegeid) PRINT 'ѡרҵ¿Î³É¹¦' else BEGIN Rollback Transaction PRINT '²»ÔÊÐí¿çԺѡ¿Î£¡' END END ELSE PRINT 'Ñ¡ÐÞ¹«¹²Ñ¡Ð޿γɹ¦' END |
--Ñ¡ÐÞ±¾Ñ§Ôº×¨Òµ¿Î
insert into Scts(courseid,studentid,teacherid)
values ('20224B0','200520805403','080102');
--Ñ¡Ð޷DZ¾Ôº×¨Òµ¿Î ÖÕÖ¹
insert into Scts(courseid,studentid,teacherid)
values ('10019B5','200520805403','080102');
--Ñ¡ÐÞ¹«¹²Ñ¡ÐÞ¿Î
insert into Scts(courseid,studentid,teacherid) values ('50095Q0','200520805403','080102'); select *from students where college='08' select *from colleges where collegeid='08' select *from courses where courseid in (select courseid from courses where character not like 'רҵ%')and college ='08' select *from scts where studentid='200520805403' delete from scts where courseid='20224B0' and studentid='200520805403'; |
¡¡--4¡¢Éè¼ÆDML´¥·¢Æ÷ÒÔʵÏÖ¶ÔÃô¸ÐÊý¾ÝµÄ×Ô¶¯É󼯣ºµ±Óû§ÔÚSCTS±íÖвåÈëмǼ»òÕ߸üÐÂSCTS±íÖеÄregular_gradeºÍexam_gradeÊôÐÔÁÐʱ£¬×Ô¶¯Ôڳɼ¨±ä»¯±íGRADE_LOG£¨student,
course, teacher, regular_grade, exam_grade, username,
userdate£©ÖÐÔö¼ÓÒ»ÌõÏàÓ¦¼Ç¼£¬ÒԼǼµ±Ç°Óû§¶ÔѧÉú³É¼¨µÄ²Ù×÷¡£(system_user)
Create table GRADE_LOG( id int identity(1,1) primary key, student varchar(20) not null , course varchar(50) not null, teacher varchar(20) not null, regular_grade float , exam_grade float, username varchar(20) not null, userdate datetime not null, operator varchar(10) not null ) --select system_user getdate() Create trigger Tri_IN_U_SCTS on SCTS after INSERT,UPDATE AS BEGIN IF UPDATE(regular_grade)OR UPDATE(exam_grade)or (exists (select 1 from inserted) and not exists (select 1 from deleted)) BEGIN DECLARE @student varchar(20); DECLARE @course varchar(50); DECLARE @teacher varchar(20); DECLARE @rgrade float; DECLARE @egrade float; DECLARE @username varchar(20); DECLARE @date datetime; DECLARE @type varchar(10); select @type='update'; if exists (select 1 from inserted) and not exists (select 1 from deleted) select @type='insert'; select @student=sname from students where studentid in(select studentid from inserted ) select @course =cname from courses where courseid in (select courseid from inserted) select @teacher =tname from teachers where teacherid in (select teacherid from inserted) select @rgrade=regular_grade,@egrade=exam_grade from inserted select @username=system_user,@date=getdate(); insert into GRADE_LOG values(@student,@course,@teacher,@rgrade,@egrade,@username,@date,@type) END END select * from GRADE_LOG; |
--¸üгɼ¨
update Scts
set regular_grade='100',exam_grade='20'
where studentid='200520805403'and courseid='20224B0'
and teacherid='080102'
--Ö»¸üÐÂ×ܳɼ¨£¬²»¼¤»î´¥·¢Æ÷
update Scts
set total_mark='100'
where studentid='200520805403'and courseid='20224B0'
and teacherid='080102'
--5¡¢DDL´¥·¢Æ÷£¬½ûÖ¹Óû§ÔÚTeachingÊý¾Ý¿âÖеÄÐ޸ıíºÍɾ³ý±í²Ù×÷¡£
CREATE TRIGGER TRI_Teaching_DDL ON database for alter_table,drop_table AS BEGIN print '²»ÔÊÐíÐ޸Ļòɾ³ýÊý¾Ý±í£¡' Rollback Transaction END |
|