Trigger sql
--- tao trigger cho phep chen vao diem cao nhat
createtrigger trginsertDiem
on Diem
forinsert
as
declare @diemlan1 float
declare @masv int
declare @diemlan2 float
select @diemlan1=inserted.diemlan1,
@diemlan2=inserted.diemlan2,
@masv=inserted.masv
from inserted
if(@diemlan2>@diemlan1)
update diem
set diem.diem=@diemlan2
where masv=@masv
select*from diem
end
else
update diem
set diem.diem=@diemlan1
where masv=@masv
select*from diem
end
--- chen du lieu
alter trigger trginsertKem
on Kem
for insert
as
Declare @soluong int
select @soluong=inserted.soluong
from inserted
if (@soluong<0)
print 'ban gia tri nhap sai'
rollback transaction
end
else
print 'ban da nhap thanh cong'
G0
insert into kem
values(5,'kem trang tien 4',2000)
End
--tao trigger cho su kien chen dl <0 >10 bao loi
-- trong bang diem
CREATE TRIGGER trginsertDiem
ON Diem
For insert
as
DECLARE @Diem int
SELECT @Diem=inserted.Diem
FROM Inserted
IF (@Diem <0) or (@Diem >10)
print 'Sai gia tri diem'
Rollback transaction
end
else
Print 'qua trinh chen dl thanh cong'
end
--- nhap du lieu cho cac bang
--- 9 a - tao trigger de tat cac truong trong bang sv phai nhap
createtrigger trginsertSinhvien
on Sinhvien
forinsert
as
-- khai bao 5 bien luu tru
Declare @tensv varchar(20)
Declare @diachi varchar(50)
Declare @soDT varchar(10)
Declare @Khoa varchar(20)
Declare @lop varchar(10)
--- create trigger tr_hocbong on sinhvien
for insert, update
as
if exists (select * from inserted WHERE Tinh not like 'TPHCM' and HocBong > 0)
raiserror('Hoc bong chi ap dung o TPHCM',15,1);
rollback tran
end;
-- thu nghiem
exec sp_themsv @masv = '00004',
@tensv = 'Nguyen Hong Phu',
@ngaysinh = '08/07/1990',
@gioitinh = '1',
@diachi = '207/16',
@tinh = 'HaNoi',
@makhoa = 'CNTT',
@hocbong = '20000'
update sinhvien set tinh = 'Ha Noi' where masv = '91002'
create trigger tr_lanthi_insert on ketqua
for insert
as
if (select count(*) as SoLT from ketqua as a, inserted as b
where a.masv = b.masv
and a.mamh = b.mamh
) > 2
raiserror('Sinh vien da thi 2 lan mon hoc nay',15,1);
rollback tran;
end;
create trigger tr_lanthi_lan2 on ketqua
for insert,update
as
if exists (select * from inserted where lanthi =2)
if not exists (select * from ketqua as a, inserted as b
where a.masv = b.masv
and a.mamh = b.mamh
and a.lanthi = '1')
raiserror('Chua co lan 1',15,1);
rollback tran;
end;
create trigger tr_dtb_sv on Sinhvien
for update
as
if update(DTB)
if (select DTB from inserted) <>
(select AVG(diem)
from ketqua_ch as kq
where kq.masv = (select masv from inserted) )
raiserror('DTB phai bang TongDiem / SoMon da hoc',15,1);
rollback
end;
create trigger tr_dtb_kq on KetQua
for insert, update, delete
as
if update(diem) or not exists (select * from deleted)
update sinhvien
set DTB = (select AVG(diem)
from ketqua_ch as kq
where kq.masv = (select masv from inserted))
where masv = (select masv from inserted)
end;
if not exists (select * from inserted)
update sinhvien
set DTB = (select AVG(diem)
from ketqua_ch as kq
where kq.masv = (select masv from deleted))
where masv = (select masv from deleted)
end;
end;
create trigger tr_xeploai on sinhvien
for update
as
if exists (select * from sinhvien as a, inserted as b
where a.masv = b.masv
and a.XL <> case
when a.dtb < 5.0 then 'Yeu'
when a.dtb >= 5.0 and a.dtb < 6.5 then 'TB'
when a.dtb >= 6.5 and a.dtb < 8.0 then 'Kha'
when a.dtb >= 8.0 and a.dtb < 9.0 then 'Gioi'
when a.dtb >= 9.0 and a.dtb <= 10 then 'Xuat sac'
end)
raiserror('Xep loai sinh vien khong theo chuan ',15,1);
rollback
end;
--- Mã sinh viên phải tuân theo quy tắc sau: 1 ký tự đầu là ‘V’, 4 ký tự sau biểu thị số thứ tự.
create trigger tr_masv on Sinhvien
for insert, update
as
if update(MaSV) or not exists (select * from deleted)
if not exists(select * from inserted
where patindex('[V][0-9][0-9][0-9][0-9]',masv) > 0)
raiserror('Mã sinh viên phải tuân theo quy tắc sau: 1 ký tự đầu là ‘V’, 4 ký tự sau biểu thị số thứ tự',15,1);
rollback
end;
-. Them moi nhan vien, kiem tra tuoi <=25 lam viec o Quan Ly
create trigger tr_tuoinv on nhanvien
for insert
as
if exists (select * from inserted as a, PHONGBAN as b
where a.PHG = b.MAPHG
and YEAR(GETDATE()) - YEAR(NGSINH) <= 25
and TENPHG not like 'Quan ly')
raiserror('Nhan vien tuoi <=25 phai lam viec o phong Quan ly',15,1);
rollback tran;
end;
drop trigger tr_tuoinv
-- test
INSERT INTO NHANVIEN VALUES ('NGUYEN','HONG','PHU','111','08/07/1990','Q9-TP.HCM','NAM',30000,'005',4)
delete from nhanvien where manv = 111
Bạn đang đọc truyện trên: Truyen2U.Com