Baitap Trigger

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 12

Phn 3:Trigger in SQL

GS:Tng Hong Anh Kin

I:Qun l{ hng ha
Cu 11:Ngy mua hng (NGHD) ca mt khch hng thnh vin
s ln hn hoc bng ngy khch hng ng k{ thnh vin (NGDK).
CREATE TRIGGER UPDATE_KH_C11 ON KHACHHANG FOR UPDATE AS DECLARE @NGDK SMALLDATETIME, @NGHD SMALLDATETIME SELECT FROM @NGDK=NGDK INSERTED

IF(@NGDK>ANY(SELECT NGHD FROM HOADON A, INSERTED I WHERE A.MAKH=I.MAKH)) BEGIN ROLLBACK TRAN PRINT 'ERROR!NGDK PHAI NHO HON NGHD' END ELSE PRINT' SUCCESSFUL' ------CREATE TRIGGER HD_C11 ON HOADON FOR INSERT,UPDATE AS DECLARE @NGDK SMALLDATETIME, @NGHD SMALLDATETIME SELECT @NGDK=NGDK,@NGHD=NGHD FROM INSERTED I, KHACHHANG A WHERE I.MAKH=A.MAKH IF @NGHD<@NGDK BEGIN ROLLBACK TRAN PRINT 'ERROR!NGHD PHAI LON HON NGDK' END ELSE PRINT' SUCCESSFUL'

Cu 12: Ngy bn hng (NGHD) ca mt nhn vin phi ln hn hoc bng ngy nhn vin vo lm
CREATE TRIGGER UPDATE_NV_C12 ON NHANVIEN FOR UPDATE AS DECLARE @NGVL SMALLDATETIME, @NGHD SMALLDATETIME SELECT FROM @NGVL=NGVL INSERTED

IF(@NGVL>ANY(SELECT NGHD FROM HOADON A, INSERTED I WHERE A.MANV=I.MANV)) BEGIN ROLLBACK TRAN PRINT 'ERROR!NGVL PHAI NHO HON NGHD' END ELSE PRINT' SUCCESSFUL' ------CREATE TRIGGER HD_C12 ON HOADON FOR INSERT,UPDATE AS DECLARE @NGVL SMALLDATETIME, @NGHD SMALLDATETIME SELECT @NGVL=NGVL,@NGHD=NGHD FROM INSERTED I, NHANVIEN A WHERE I.MANV=A.MANV IF @NGHD<@NGVL BEGIN ROLLBACK TRAN PRINT 'ERROR!NGHD PHAI LON HON NGVL' END ELSE PRINT' SUCCESSFUL'

Cu 13: Mi mt ha n phi c t nht mt chi tit ha n.


CREATE TRIGGER CTHD_C13 ON CTHD FOR DELETE,UPDATE AS DECLARE @SL @SOHD INT SELECT INT,

@SL=COUNT(A.SOHD),@SOHD=D.SOHD

FROM DELETED D,CTHD A WHERE A.SOHD=D.SOHD GROUP BY D.SOHD IF(@SL<1) BEGIN DELETE FROM HOADON WHERE SOHD=@SOHD PRINT 'DA DELETE CTHD CUOI CUNG CUA HOADON TREN' END -----CREATE TRIGGER HOADON_C13 ON HOADON FOR INSERT AS DECLARE @SOHD INT SELECT FROM @SOHD=SOHD INSERTED

UPDATE CTHD SET MASP='NONE',SL=0 WHERE SOHD=@SOHD PRINT 'SUCCESSFUL! DE NGHI UPDATE LAI CTHD(MAC DINH:MASP="NONE", SL=0)'

Cu 14: Tr gi ca mt ha n l tng thnh tin (s lng*n gi) ca cc chi tit thuc ha n


CREATE TRIGGER INSERT_HOADON_C14 ON HOADON FOR INSERT AS UPDATE HOADON SET TRIGIA=0 WHERE SOHD=(SELECT SOHD FROM INSERTED) PRINT'DA INSERT 1 HOADON VOI TRIGIA BAN DAU LA 0 VND' ------------CREATE TRIGGER UPDATE_HOADON_C14 ON HOADON FOR INSERT AS UPDATE HOADON SET TRIGIA=(SELECT TRIGIA FROM DELETED) WHERE SOHD=(SELECT SOHD FROM INSERTED) PRINT'DA UPDATE 1 HOADON VOI TRIGIA KHONG THAY DOI' ------------CREATE TRIGGER INSERT_CTHD_C14 ON CTHD FOR INSERT AS DECLARE @SL INT,

@GIA @SOHD INT

MONEY,

SELECT @GIA=GIA,@SL=SL,@SOHD=SOHD FROM INSERTED A, SANPHAM B WHERE A.MASP=B.MASP HOADON TRIGIA=TRIGIA+@SL*@GIA PRINT'DA INSERT 1 CTHD VA UPDATE LAI TRIGIA CUA HOADON TUONG UNG' -------------CREATE TRIGGER DELETE_CTHD_C14 ON CTHD FOR DELETE AS DECLARE @SL INT, @GIA MONEY, @SOHD INT SELECT @GIA=GIA,@SL=SL,@SOHD=SOHD FROM DELETED A, SANPHAM B WHERE A.MASP=B.MASP HOADON TRIGIA=TRIGIA-@SL*@GIA PRINT'DA DELETE 1 CTHD VA UPDATE LAI TRIGIA CUA HOADON TUONG UNG' ------------------CREATE TRIGGER UPDATE_CTHD_C14 ON CTHD FOR UPDATE AS DECLARE @SL_CU INT, @SL_MOI INT, @GIA_CU MONEY, @GIA_MOI MONEY, @SOHD_CU INT, @SOHD_MOI INT SELECT @GIA_CU=GIA,@SL_CU=SL,@SOHD_CU=SOHD FROM DELETED A, SANPHAM B WHERE A.MASP=B.MASP SELECT @GIA_MOI=GIA,@SL_MOI=SL,@SOHD_MOI=SOHD FROM INSERTED A, SANPHAM B WHERE A.MASP=B.MASP IF(@SOHD_CU=@SOHD_MOI) BEGIN UPDATE HOADON SET TRIGIA=TRIGIA+@SL_MOI*@GIA_MOI-@SL_CU*@GIA_CU WHERE SOHD=@SOHD_CU END ELSE BEGIN UPDATE HOADON SET TRIGIA=TRIGIA-@SL_CU*@GIA_CU WHERE SOHD=@SOHD_CU UPDATE SET UPDATE SET

UPDATE HOADON SET TRIGIA=TRIGIA+@SL_MOI*@GIA_MOI WHERE SOHD=@SOHD_MOI END PRINT'DA UPDATE 1 CTHD VA UPDATE LAI TRIGIA CUA HOADON TUONG UNG' ------------------CREATE TRIGGER UPDATE_HOADON_C14 ON HOADON FOR INSERT AS DECLARE @GIA_CU MONEY, @GIA_MOI MONEY, @SOHD INT, @SL INT SELECT FROM SELECT FROM @GIA_CU=GIA DELETED @GIA_MOI=GIA INSERTED

SELECT @SOHD=SOHD,@SL=SL FROM INSERTED A, CTHD B WHERE A.MASP=B.MASP UPDATE HOADON SET TRIGIA=TRIGIA+@SL*(@GIA_MOI-@GIA_CU) WHERE SOHD=@SOHD PRINT'DA UPDATE 1 HOADON VOI TRIGIA KHONG THAY DOI'

Cu 15: Doanh s ca mt khch hng l tng tr gi cc ha n m khch hng thnh vin mua.
CREATE TRIGGER INSERT_KHACHHANG_C15 ON KHACHHANG FOR INSERT AS DECLARE @MAKH CHAR(4) SELECT FROM @MAKH=MAKH INSERTED

UPDATE KHACHHANG SET DOANHSO=0 WHERE MAKH=@MAKH PRINT 'DA INSERT 1 KHACHHANG MOI VOI DOANHSO BAN DAU LA 0 VND' ---------------CREATE TRIGGER UPDATE_KHACHHANG_C15 ON KHACHHANG FOR UPDATE AS DECLARE @MAKH CHAR(4), @DOANHSO_CU MONEY SELECT @MAKH=MAKH

FROM SELECT FROM

INSERTED @DOANHSO_CU=DOANHSO DELETED

UPDATE KHACHHANG SET DOANHSO=@DOANHSO_CU WHERE MAKH=@MAKH PRINT 'DA UPDATE 1 KHACHHANG' ---------------CREATE TRIGGER INSERT_HOADON_C15 ON HOADON FOR INSERT AS DECLARE @TRIGIA MONEY, @MAKH CHAR(4) SELECT FROM @MAKH=MAKH,@TRIGIA=TRIGIA INSERTED

UPDATE KHACHHANG SET DOANHSO=DOANHSO+@TRIGIA WHERE MAKH=@MAKH PRINT 'DA INSERT 1 HODON MOI VA UPDATE LAI DOANHSO CUA KH CO SOHD TREN' ----------CREATE TRIGGER DELETE_HOADON_C15 ON HOADON FOR DELETE AS DECLARE @TRIGIA MONEY, @MAKH CHAR(4) SELECT FROM @MAKH=MAKH,@TRIGIA=TRIGIA DELETED

UPDATE KHACHHANG SET DOANHSO=DOANHSO-@TRIGIA WHERE MAKH=@MAKH PRINT 'DA DELETE 1 HODON MOI VA UPDATE LAI DOANHSO CUA KH CO SOHD TREN' --------------CREATE TRIGGER UPDATE_HOADON_C15 ON HOADON FOR UPDATE AS DECLARE @TRIGIA_CU MONEY, @TRIGIA_MOI MONEY, @MAKH CHAR(4) SELECT FROM SELECT FROM @MAKH=MAKH,@TRIGIA_MOI=TRIGIA INSERTED @MAKH=MAKH,@TRIGIA_CU=TRIGIA DELETED

UPDATE KHACHHANG SET DOANHSO=DOANHSO+@TRIGIA_MOI-@TRIGIA_CU WHERE MAKH=@MAKH PRINT 'DA UPDATE 1 HOADON MOI VA UPDATE LAI DOANHSO CUA KH CO SOHD TREN'

II:Qun l{ gio v Cu 9: Lp trng ca mt lp phi l hc vin ca lp


CREATE TRIGGER UPDATE_LOP_C9 ON LOP FOR UPDATE AS DECLARE @MALOP1 @MALOP2 char(3), char(3)

SELECT @MALOP1=A.MALOP,@MALOP2=B.MALOP FROM INSERTED A, HOCVIEN B WHERE A.TRGLOP=B.MAHV IF(@MALOP1<>@MALOP2) BEGIN ROLLBACK TRAN PRINT'TRGLOP CUA 1 LOP PHAI LA HOCVIEN CUA LOP DO' END ELSE PRINT 'SUCCESSFUL'

Cu 10: Trng khoa phi l gio vin thuc khoa v c hc v TS hoc PTS.
CREATE TRIGGER UPDATE_KHOA_C10 ON KHOA FOR UPDATE AS DECLARE @MAKHOA1 varchar(4), @MAKHOA2 varchar(4), @HOCVI varchar(10) SELECT @MAKHOA1=A.MAKHOA,@MAKHOA2=B.MAKHOA,@HOCVI=HOCVI FROM INSERTED A,GIAOVIEN B WHERE A.TRGKHOA=B.MAGV IF(@MAKHOA1<>@MAKHOA2) BEGIN ROLLBACK TRAN PRINT'ERROR! TRGKHOA PHAI LA GIAOVIEN THUOC KHOA' END ELSE

IF(@HOCVI<>'TS' AND @HOCVI<>'PTS') BEGIN ROLLBACK TRAN PRINT 'ERROR! TRGKHOA PHAI CO HOCVI="TS" HOAC HOCVI="PTS"' END ELSE PRINT 'SUCCESSFUL' ----------CREATE TRIGGER UPDATE_GIAOVIEN_C10 ON GIAOVIEN FOR UPDATE AS DECLARE @MAKHOA1 varchar(4), @MAKHOA2 varchar(4), @HOCVI varchar(10) SELECT @MAKHOA1=A.MAKHOA,@MAKHOA2=B.MAKHOA,@HOCVI=HOCVI FROM INSERTED A,KHOA B WHERE B.TRGKHOA=A.MAGV IF(@MAKHOA1<>@MAKHOA2) BEGIN ROLLBACK TRAN PRINT'ERROR! TRGKHOA PHAI LA GIAOVIEN THUOC KHOA' END ELSE IF(@HOCVI<>'TS' AND @HOCVI<>'PTS') BEGIN ROLLBACK TRAN PRINT 'ERROR! TRGKHOA PHAI CO HOCVI="TS" HOAC HOCVI="PTS"' END ELSE PRINT 'SUCCESSFUL'

Cu 15: Hc vin ch c thi mt mn hc no khi lp ca hc vin hc xong mn hc ny


ALTER TRIGGER INSERT_YPDATE_KETQUATHI_C15 ON KETQUATHI FOR INSERT, UPDATE AS DECLARE @NGTHI SMALLDATETIME, @DENNGAY SMALLDATETIME SELECT @NGTHI=NGTHI,@DENNGAY=DENNGAY FROM INSERTED A,HOCVIEN B, GIANGDAY C WHERE A.MAHV=B.MAHV AND B.MALOP=C.MALOP AND A.MAMH=C.MAMH IF(@NGTHI>@DENNGAY) PRINT 'SUCCESSFUL!KETQUATHI HOP LE.' ELSE BEGIN ROLLBACK TRAN

PRINT 'ERROR!LOP CUA HV CHUA HOC XONG MON NAY' END -------ALTER TRIGGER UPDATE_GIANGDAY_C15 ON GIANGDAY FOR UPDATE AS DECLARE @NGTHI SMALLDATETIME, @DENNGAY SMALLDATETIME SELECT FROM @DENNGAY=DENNGAY INSERTED

IF(@DENNGAY<ALL (SELECT NGTHI FROM INSERTED A,HOCVIEN B, KETQUATHI C WHERE A.MALOP=B.MALOP AND B.MAHV=C.MAHV AND A.MAMH=C.MAMH)) PRINT 'SUCCESSFUL!THOA YEU CAU DENNGAY<NGTHI' ELSE BEGIN ROLLBACK TRAN PRINT 'ERROR!ANH HUONG DEN KETQUATHI, NGAY_KET_THUC PHAI TRUOC HON NGAYTHI.' END

Cu 16: Mi hc kz ca mt nm hc, mt lp ch c hc ti a 3 mn
CREATE TRIGGER INSERT_UPDATE_GIANGDAY_C16 ON GIANGDAY FOR INSERT, UPDATE AS DECLARE @SL_MONHOC INT SELECT @SL_MONHOC=COUNT(A.MAMH) FROM GIANGDAY A, INSERTED B WHERE A.MALOP=B.MALOP AND A.HOCKY=B.HOCKY AND A.NAM=B.NAM IF(@SL_MONHOC=4) BEGIN ROLLBACK TRAN PRINT 'ERROR!LOP NAY DA HOC HON 3 MON TRONG CUNG HOCKY, NAM' END

Cu 17: S s ca mt lp bng vi s lng hc vin thuc lp


CREATE TRIGGER INSERT_LOP_C17 ON LOP FOR INSERT AS UPDATE LOP SET SISO=0

WHERE MALOP=(SELECT FROM

MALOP

INSERTED) ---------DROP TRIGGER UPDATE_LOP_C17 ON LOP FOR UPDATE AS UPDATE LOP SET SISO=(SELECT SISO FROM DELETED) WHERE MALOP=(SELECT MALOP FROM INSERTED) -------------CREATE TRIGGER INSERT_HOCVIEN_C17 ON HOCVIEN FOR INSERT AS UPDATE LOP SET SISO=SISO+1 WHERE MALOP=(SELECT MALOP FROM INSERTED) -----------ALTER TRIGGER DELETE_HOCVIEN_C17 ON HOCVIEN FOR DELETE AS DECLARE @MAHV CHAR(5), @TRGLOP CHAR(5), @MALOP CHAR(3) SELECT @MAHV=MAHV, @TRGLOP=TRGLOP, @MALOP=A.MALOP FROM DELETED A, LOP B WHERE A.MALOP=B.MALOP UPDATE LOP SET SISO=SISO-1 WHERE MALOP=@MALOP ------------CREATE TRIGGER UPDATE_HOCVIEN_C17 ON HOCVIEN FOR UPDATE AS UPDATE LOP SET SISO=SISO+1 WHERE MALOP=(SELECT MALOP FROM INSERTED) UPDATE LOP SET SISO=SISO-1 WHERE MALOP=(SELECT MALOP FROM DELETED)

Cu 18: Trong quan h DIEUKIEN gi tr ca thuc tnh MAMH v MAMH_TRUOC trong cng mt b khng

c ging nhau (A,A) v cng khng tn ti hai b (A,B) v (B,A).


CREATE TRIGGER INSERT_UPDATE_C18 ON DIEUKIEN FOR INSERT, UPDATE AS DECLARE @MAMH VARCHAR(10), @MAMH_TRUOC VARCHAR(10) SELECT FROM @MAMH=MAMH, @MAMH_TRUOC=MAMH_TRUOC INSERTED

IF((@MAMH=@MAMH_TRUOC)OR (@MAMH IN (SELECT MAMH_TRUOC FROM DIEUKIEN WHERE MAMH=@MAMH_TRUOC))OR (@MAMH_TRUOC IN (SELECT MAMH FROM DIEUKIEN WHERE MAMH_TRUOC=@MAMH))) BEGIN ROLLBACK TRAN PRINT 'DIEUKIEN KO HOP LE' END

Cu 19: Cc gio vin c cng hc v, hc hm, h s lng th mc lng bng nhau


ALTER TRIGGER INSERT_UPDATE_GIAOVIEN_C19 ON GIAOVIEN FOR INSERT, UPDATE AS DECLARE @MUCLUONG MONEY, @MAGV CHAR(4) SELECT DISTINCT @MUCLUONG=A.MUCLUONG,@MAGV=B.MAGV FROM GIAOVIEN A, INSERTED B WHERE A.HOCHAM=B.HOCHAM AND A.HOCVI=B.HOCVI AND A.HESO=B.HESO AND A.MAGV<>B.MAGV UPDATE GIAOVIEN SET MUCLUONG=@MUCLUONG WHERE MAGV=@MAGV

Cu 20: Hc vin ch c thi li (ln thi >1) khi im ca ln thi trc di 5


CREATE ON FOR AS TRIGGER INSERT_UPDATE_KETQUATHI_C20 KETQUATHI INSERT, UPDATE DECLARE @LANTHI INT, @DIEM NUMERIC(4,2)

SELECT FROM

@LANTHI=LANTHI INSERTED

IF(@LANTHI>1) BEGIN SELECT @DIEM=B.DIEM FROM INSERTED A,KETQUATHI B WHERE A.MAHV=B.MAHV AND A.MAMH=B.MAMH AND B.LANTHI=@LANTHI-1 IF(@DIEM>=5) BEGIN ROLLBACK TRAN PRINT 'HV NAY DA THI DAT' END END DELETE FROM KETQUATHI WHERE LANTHI>@LANTHI

Cu 24: Gio vin ch c phn cng dy nhng mn thuc khoa gio vin ph trch.
DROP TRIGGER INSERT_GIANGDAY_C24 ON GIANGDAY FOR INSERT, UPDATE AS DECLARE @MAKHOA1 CHAR(4), @MAKHOA2 CHAR(4) SELECT @MAKHOA1=B.MAKHOA, @MAKHOA2=C.MAKHOA FROM INSERTED A, MONHOC B, GIAOVIEN C WHERE A.MAMH=B.MAMH AND A.MAGV=C.MAGV IF(@MAKHOA1<>@MAKHOA2) BEGIN ROLLBACK TRAN PRINT 'ERROR!MAMH PHAI THUOC KHOA GIAO VIEN PHU TRACH' END ELSE PRINT 'SUCCESSFUL'

You might also like