You are on page 1of 4

--- ON TAP THUC HANH (TRIGGER)----- Ngay thi: 11/06/2012 --use master if DB_ID (N'ONTAP_TH') is not null drop

database ONTAP_TH create database ONTAP_TH use ONTAP_TH go --================================= create table HANG_HOA ( MaHH int identity(1,1) primary key, TenHH nvarchar(100), DVTinh nvarchar(20), DonGia float ) go insert into HANG_HOA values(N'Qut my',N'Ci',150) insert into HANG_HOA values(N'Bn mini',N'Ci',90) insert into HANG_HOA values(N'Bng hc sinh',N'Ci',460) insert into HANG_HOA values(N'Bia Tiger',N'Thng',330) insert into HANG_HOA values(N'Sa ng th',N'Lon',330) insert into HANG_HOA values(N'M Ho Ho',N'Thng',120) go create table DON_DAT_HANG ( SoDH int identity(1,1) primary key, NgayDH date default getdate(), TenKH nvarchar(50), TongTien float default 0 ) go insert into DON_DAT_HANG (TenKH) values(N'Phan Thanh Bnh') insert into DON_DAT_HANG (TenKH) values(N'Trn Ch Quang') insert into DON_DAT_HANG (TenKH) values(N'Lm Vn nh') insert into DON_DAT_HANG (TenKH) values(N'Nguyn Cm Vn') insert into DON_DAT_HANG (TenKH) values(N'L Th Tng Vi') insert into DON_DAT_HANG (TenKH) values(N'Nguyn Hng Yn') go create table CHI_TIET_DON_HANG ( SoDH int, MaHH int, Solg int, ThanhTien float default 0, primary key(SoDH,MaHH), foreign key (SoDH) references DON_DAT_HANG (SoDH), foreign key (MaHH) references HANG_HOA (MaHH) ) go insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(1,1,20) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(1,2,10) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(2,2,30) Trang 1

insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(2,6,30) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(3,1,30) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(3,2,40) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(3,3,10) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(3,5,10) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(5,2,40) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(5,6,20) go --================================================================= --CAU 01: Tao TRIGGER khi THEM bang CHI_TIET_DON_HANG se thuc hien: --1. Kiem tra rong cho cac cot SoDH, MaHH, Solg --2. Kiem tra SoDH co ton tai trong DON_DAT_HANG khong --3. Kiem tra MaHH co ton tai trong HANG_HOA khong --4. Kiem tra Solg > 0 --5. Kiem tra SoDH + SoHH phai duy nhat --6. Tu MaHH hay tim DonGia trong bang HANG_HOA --7. Tinh ThanhTien = Solg * DonGia vua tim duoc --8. Phat lenh cap nhat (INSERT INTO) --9. Cap nhat lai TongTien cua SoDH vua them trong bang DON_DAT_HANG go create trigger them_CHITIET_DONHANG on CHI_TIET_DON_HANG instead of insert as declare @SoDH int,@MaHH int,@Solg int,@ThanhTien float,@DonGia float select @SoDH=SoDH,@MaHH=MaHH,@Solg=Solg from inserted -- KIEM TRA RONG if (@SoDH is null) BEGIN raiserror (N'SoDH khng c rng!',16,1) return END ---------------------------------------if (@MaHH is null) BEGIN raiserror (N'MaHH khng c rng!',16,1) return END ---------------------------------------if (@Solg is null) BEGIN raiserror (N'Solg khng c rng!',16,1) return END ----------------------------------------- KIEM TRA TON TAI if NOT EXISTS (select * from DON_DAT_HANG where SoDH=@SoDH) BEGIN raiserror (N'SoDH ny khng tn ti!',16,1) return END ---------------------------------------if NOT EXISTS (select * from HANG_HOA where MaHH=@MaHH) BEGIN raiserror (N'MaHH ny khng tn ti!',16,1) return END ---------------------------------------Trang 2

-- KIEM TRA MIEN GIA TRI if (@Solg <= 0) BEGIN raiserror (N'Solg phi > 0!',16,1) return END ----------------------------------------- KIEM TRA DUY NHAT if EXISTS (select * from CHI_TIET_DON_HANG where SoDH=@SoDH and MaHH=@MaHH) BEGIN raiserror (N'(SoDH + MaHH) ny tn ti!',16,1) return END ----------------------------------------- TIM DON GIA select @DonGia=DonGia from HANG_HOA where MaHH=@MaHH -- TINH THANH TIEN set @ThanhTien=@Solg*@DonGia -- CAP NHAT THONG TIN insert into CHI_TIET_DON_HANG values(@SoDH,@MaHH,@Solg,@ThanhTien) update DON_DAT_HANG set TongTien=(select SUM(ThanhTien) from CHI_TIET_DON_HANG where SoDH=@SoDH) where SoDH=@SoDH go insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(2,4,10) insert into CHI_TIET_DON_HANG (SoDH,MaHH,Solg) values(2,3,15) --select * from DON_DAT_HANG --select * from CHI_TIET_DON_HANG go --================================================================= --CAU 02: Tao TRIGGER khi SUA bang CHI_TIET_DON_HANG se thuc hien: --1. Khong sua khoa chinh, SoHD + MaHH phai ton tai --2. Kiem tra Solg > 0 --3. Tu MaHH hay tim DonGia trong bang HANG_HOA --4. Tinh ThanhTien = Solg * DonGia cho mau tin hien hanh --5. Phat lenh cap nhat (UPDATE) trong CHI_TIET_DON_HANG --6. Tinh lai TongTien cua SoDH vua sua go create trigger sua_CHITIET_DONHANG on CHI_TIET_DON_HANG instead of update as declare @SoDH int,@MaHH int,@Solg int,@ThanhTien float,@DonGia float select @SoDH=SoDH,@MaHH=MaHH,@Solg=Solg from inserted -- KIEM TRA DUY NHAT if NOT EXISTS (select * from CHI_TIET_DON_HANG where SoDH=@SoDH and MaHH=@MaHH) BEGIN raiserror (N'(SoDH + MaHH) ny khng tn ti!',16,1) return END ----------------------------------------- KIEM TRA MIEN GIA TRI if (@Solg <= 0) BEGIN raiserror (N'Solg phi > 0!',16,1) Trang 3

return END ----------------------------------------- TIM DON GIA select @DonGia=DonGia from HANG_HOA where MaHH=@MaHH -- TINH THANH TIEN set @ThanhTien=@Solg*@DonGia -- CAP NHAT THONG TIN update CHI_TIET_DON_HANG set SoDH=@SoDH,MaHH=@MaHH,Solg=@Solg,ThanhTien=@ThanhTien where SoDH=@SoDH and MaHH=@MaHH update DON_DAT_HANG set TongTien=(select SUM(ThanhTien) from CHI_TIET_DON_HANG where SoDH=@SoDH) where SoDH=@SoDH go update CHI_TIET_DON_HANG set SoDH=1,MaHH=1,Solg=10 where SoDH=1 and MaHH=1 --select * from CHI_TIET_DON_HANG --================================================================= --CAU 03: Tao TRIGGER khi XOA bang DON_DAT_HANG se thuc hien: --1. Kiem tra SoDH can xoa phai ton tai trong bang DON_DAT_HANG --2. Kiem tra SoDH can xoa phai chua co chi tiet, neu co thi ko duoc xoa --3. Phat lenh cap nhat (DELETE) go create trigger xoa_DONHANG on DON_DAT_HANG instead of delete as declare @SoDH int select @SoDH=SoDH from deleted if NOT EXISTS (select * from DON_DAT_HANG where SoDH=@SoDH) BEGIN raiserror (N'SoDH ny khng tn ti!',16,1) return END ---------------------------------------if EXISTS (select * from CHI_TIET_DON_HANG where SoDH=@SoDH) BEGIN raiserror (N'SoDH ny c chi tit, khng c xa!',16,1) return END ---------------------------------------delete from DON_DAT_HANG where SoDH=@SoDH go delete from DON_DAT_HANG where SoDH=6 select * from DON_DAT_HANG go

--- L.T.H ---

Trang 4

You might also like