You are on page 1of 5

--Khi insert – update – delete ở bảng ChiTietDonHang

--tăng/giảm số lượng ở bảng SanPham


--cập nhật đơn giá bán ở bảng ChiTietDonHang theo giá bán hiện tại (được lưu ở bảng
SanPham)

ALTER TRIGGER UTG_CTDH


ON ChiTietDonHang
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
--Khi Insert hoặc Update:
IF (EXISTS (SELECT * FROM Inserted))
BEGIN
--Trừ bớt số lượng hiện còn từ Inserted.
UPDATE SanPham
SET SoLuongHienCon = SoLuongHienCon - I.soLuongDat
FROM inserted AS I
WHERE I.maSP = SanPham.maSP

--Cập nhật lại giá bán, chỉ khi Insert.


IF (NOT EXISTS (SELECT * FROM Deleted))
BEGIN
UPDATE ChiTietDonHang
SET donGia = SP.DonGiaBan
FROM ChiTietDonHang AS C JOIN Inserted AS I ON C.MaSP
= I.MaSP AND C.MaDH = I.MaDH
JOIN SanPham AS SP
ON I.MaSP = SP.MaSP
END
END
--Khi Delete hoặc Update:
IF (EXISTS (SELECT * FROM Deleted))
BEGIN
--Thêm vào số lượng hiện còn từ Deleted
UPDATE SanPham
SET SoLuongHienCon = SoLuongHienCon + D.soLuongDat
FROM deleted AS D
WHERE D.maSP = SanPham.maSP

DELETE FROM ChiTietDonHang


WHERE EXISTS (SELECT maDH, maSP
FROM deleted
WHERE deleted.maDH =
ChiTietDonHang.maDH AND deleted.maSP = ChiTietDonHang.maSP)
END
END

SELECT * FROM SanPham


SELECT * FROM ChiTietDonHang

INSERT INTO ChiTietDonHang(maDH, maSP, soLuongDat)


VALUES ('43DH001', '43SP002', 5),
('43DH002', '43SP003', 3)

DELETE FROM ChiTietDonHang


WHERE maDH = '43DH001' AND maSP = '43SP002'
DELETE FROM ChiTietDonHang
WHERE maDH = '43DH002' AND maSP = '43SP003'
GO

--Khi insert – update – delete ở bảng ChiTietPhieuNhap


--tăng/giảm số lượng ở bảng SanPham
--cập nhật đơn giá bán ở bảng SanPham (lãi 30%)

ALTER TRIGGER UTD_CTPN


ON ChiTietPhieuNhap
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
--Khi Insert hoặc Update
IF (EXISTS (SELECT * FROM inserted))
BEGIN
UPDATE SanPham
SET SoLuongHienCon = SoLuongHienCon + I.soLuongNhap
FROM inserted AS I
WHERE I.maSP = SanPham.maSP

--Cập nhật lại giá bán = Đơn giá nhập * 130% (chỉ khi Insert)
IF (NOT EXISTS (SELECT * FROM Deleted))
BEGIN
UPDATE SanPham
SET DonGiaBan = CEILING(DonGiaNhap * 1.3 / 100) * 100
FROM SanPham AS SP JOIN (SELECT MaSP, MAX(GiaNhap)
AS DonGiaNhap
FROM inserted
GROUP BY MaSP) AS
I
ON SP.MaSP = I.MaSP
END
END

--Khi Delete hoặc Update


IF (EXISTS (SELECT * FROM Deleted))
BEGIN
UPDATE SanPham
SET SoLuongHienCon = SoLuongHienCon - SoLuongNhap
FROM deleted AS D
WHERE SanPham.maSP = D.maSP

DELETE FROM ChiTietPhieuNhap


WHERE EXISTS (SELECT maPN, maSP
FROM deleted
WHERE deleted.maPN =
ChiTietPhieuNhap.maPN AND deleted.maSP = ChiTietPhieuNhap.maSP)
END
END

SELECT * FROM SanPham


SELECT * FROM ChiTietPhieuNhap

INSERT INTO ChiTietPhieuNhap


VALUES ('43PN001', '43SP002', 50, 10000),
('43PN002', '43SP003', 50, 200000)

DELETE FROM ChiTietPhieuNhap


WHERE maPN = '43PN001' AND maSP = '43SP002'
DELETE FROM ChiTietPhieuNhap
WHERE maPN = '43PN002' AND maSP = '43SP003'

You might also like