SQL Server: Trigger
Giải phóng thời gian, khai phóng năng lực
select*from Student; --Tạo 1 trigger thông báo insert thành công: --create trigger tg_report on Student for insert as --begin -- print N'Đã insert thành công'; --end; --Tạo 1 trigger kiểm soát tuổi của sinh viên khi chèn --bản ghi vào bảng Student với điều kiện tuổi phải >=18. create trigger tg_checkAge on Student for insert as begin if(select age from inserted)<18 begin print N'Tuổi phải từ 18'; rollback tran; end end; select*from Student; insert Student(Name,Age,Status) values ('AB12',18,'Normal'), ('CD34',19,'Young'), ('EF56',99,'Old'); --Trigger Delete: create trigger tg_Delete on Student for delete as begin declare @name varchar(20); set @name=(select name from deleted); print N'Đã xóa bản ghi có tên '+@name; end; delete from Student where RN=7; --Trigger update: create trigger tg_Update on Student for update as begin if(select age from inserted)<18 begin print N'Không được sửa để tuổi <18' rollback tran end end; update Student set Age=17 where RN=4; select*from Student; --Hàm update(tên_cột): Kiểm tra xem tên_cột có sự thay đổi --dữ liệu không, nếu có thì trả về true, ngược lại trả về --false create trigger tg_check_update_name on Student for update as begin if UPDATE(name) begin print N'Không được thay đổi dữ liệu cột name' rollback tran end end; update Student set Name='XYZ' where RN=1; --Tạo trigger After: create trigger tg_after_delete on Student after delete as begin declare @number nchar; select @number=COUNT(*) from deleted; print N'Số lượng bản ghi đã xóa: '+@number; end; select*from Student; delete from Student where RN in(15); --Tạo trigger instead of: select*from StudentTest; insert StudentTest values(15,1,GETDATE(),9); --Tạo trigger instead of để khi xóa bản ghi có rn=15 --ở bảng Student thì cũng xóa những bản ghi có rn=15 --ở bảng StudentTest: create trigger tg_instead_of_delete on Student instead of delete as begin delete from StudentTest where RN in(select RN from deleted); delete from Student where RN in(select RN from deleted); end; delete from Student where RN in(15); select*from Student; select*from StudentTest; --Tạo trigger instead of để khi sửa rn của bảng Student thì cũng --sửa rn ở bảng StudentTest. create trigger tg_instead_of_update on Student instead of update as begin alter table StudentTest drop constraint fk_RN; set identity_insert Student on; update Student set RN=(select RN from inserted) where RN=(select RN from deleted); update StudentTest set RN=(select RN from inserted) where RN=(select RN from deleted); alter table StudentTest add constraint fk_RN foreign key(rn) references Student(rn); end;
Giải phóng thời gian, khai phóng năng lực