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;