use IT1PHUT_2021
go
/*
tblHanghoa
tblNhomhanghoa
1- Khi insert/delete hàng hóa => cập nhập tự động số lượng hàng hóa vào bảng
tblnhomhanghoa
(NHH_SoluongHanghoa)
2- khi câp nhập tên nhóm hàng ==> tự động cập nhập giá trị này vào bảng tblhanghoa.HH_NHH_TEN
*/
select top 10 * from tblHanghoa
go
alter table tblhanghoa add HH_NHH_TEN NVARCHAR(100)
go
select top 10 * from tblNhomHanghoa
go
alter table tblNhomHanghoa add NHH_SOLUONGHANGHOA INT
go
UPDATE tblNhomHanghoa set NHH_SOLUONGHANGHOA = (select count(1) from tblHanghoa
where hh_nhh_id=nhh_id)
--1.1- Khi insert hàng hóa => cập nhập tự động số lượng hàng hóa vào bảng
--tblnhomhanghoa (NHH_SoluongHanghoa)
CREATE TRIGGER tg_tblHanghoa_Insert ON tblHanghoa
AFTER INSERT
AS
begin
UPDATE tblNhomHanghoa set NHH_SOLUONGHANGHOA = (
select count(1) from tblHanghoa where hh_nhh_id=nhh_id)
where nhh_id = (select top 1 HH_NHH_ID from inserted)
end
-- insert dữ liệu vào bảng tblhanghoa
insert into tblHanghoa (hh_ma, hh_ten, hh_nhh_id)
values ('BEP1122','BEP TU 1122','C841580A-790D-4FC7-83FF-3D9116D348C1'
)
-- kiểm tra dữ liệu trên bảng tblnhomhanghoa
select * from tblNhomHanghoa
--- 1.2 khi xóa => cũng update
CREATE TRIGGER tg_tblHanghoa_delete ON tblHanghoa
AFTER DELETE
AS
begin
UPDATE tblNhomHanghoa set NHH_SOLUONGHANGHOA = (
select count(1) from tblHanghoa where hh_nhh_id=nhh_id)
where nhh_id = (select top 1 HH_NHH_ID from deleted)
end
GO
-- thực hiện xóa
DELETE FROM tblHanghoa WHERE HH_MA='BEP1122'
-- kiểm tra dữ liệu trên bảng tblnhomhanghoa
select * from tblNhomHanghoa
---===========
--2- khi câp nhập tên nhóm hàng ==> tự động cập nhập giá trị này vào bảng tblhanghoa.HH_NHH_TEN
-- update tên nhóm cho tất cả hàng hóa
update tblHanghoa set hh_nhh_ten = (Select nhh_Ten from tblNhomHanghoa where HH_NHH_ID = nhh_id)
GO
CREATE TRIGGER tg_tblNhomhanghoa_Update ON tblNhomHanghoa
AFTER UPDATE
AS
begin
UPDATE tblHanghoa set HH_NHH_TEN = (
select nhh_ten from inserted where nhh_id = hh_nhh_id
)
where hh_nhh_id = (select nhh_id from inserted )
end
GO
-- update tên 1 nhóm hàng
UPDATE tblNhomHanghoa SET NHH_TEN = N'Nội thất nhà bếp'
where nhh_id ='C841580A-790D-4FC7-83FF-3D9116D348C1'
-- kiểm tra tên nhóm hàng trong bảng hàng hóa đã được update tự động chưa?
select * from tblNhomHanghoa
----------------------------------------------------
-- 3. instead of trigger
--- không cho xóa nhóm hàng hóa N'Nội thất nhà bếp'
-- cách 1: dùng instead of
create TRIGGER tg_tblNhomhanghoa_CamXoa ON tblNhomHanghoa
INSTEAD OF DELETE
AS
begin
-- B1: LẤY ID NHÓM HÀNG ĐANG CHUẨN BỊ XÓA
-- B2: KIỂM TRA XEM CÓ ĐÚNG NHÓM CẤM XÓA KO => ĐÚNG BỎ QUA, KO => THƯC HIỆN XÓA
IF (select nhh_id from deleted) = 'C841580A-790D-4FC7-83FF-3D9116D348C1'
select N'Nhóm cấm xóa, không thể xóa được'
else
delete from tblNhomHanghoa where nhh_id = (select nhh_id from deleted)
end
GO
----
-- Cách 2: cấm xóa : dùng after trigger thay cho instead
create TRIGGER tg_tblNhomhanghoa_CamXoa_after ON tblNhomHanghoa
after DELETE
AS
begin
-- B1: LẤY ID NHÓM HÀNG đã bị xóa
-- B2: KIỂM TRA XEM CÓ ĐÚNG NHÓM CẤM XÓA KO => ĐÚNG rollback trans
-- ==> không đúng ==> ko làm gì cả
IF (select nhh_id from deleted) = 'C841580A-790D-4FC7-83FF-3D9116D348C1'
rollback tran
end
GO
-- chạy lệnh xóa và kiểm tra
delete from tblNhomHanghoa where nhh_id = 'C841580A-790D-4FC7-83FF-3D9116D348C1'
select * from tblNhomHanghoa