Hiểu đơn giản thì Trigger là một stored procedure không có tham số. Trigger thực thi một cách tự động khi một trong ba câu lệnh Insert, Update, Delete làm thay đổi dữ liệu trên bảng có chứa trigger.
CREATE TRIGGER tên_trigger ON tên_bảng
FOR {DELETE, INSERT, UPDATE}
AS
câu_lệnh_sql
SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang
/* cập nhật hàng trong kho sau khi đặt hàng hoặc cập nhật */
CREATE TRIGGER trg_DatHang ON tbl_DatHang AFTER INSERT AS
BEGIN
UPDATE tbl_KhoHang
SET SoLuongTon = SoLuongTon - (
SELECT SoLuongDat
FROM inserted
WHERE MaHang = tbl_KhoHang.MaHang
)
FROM tbl_KhoHang
JOIN inserted ON tbl_KhoHang.MaHang = inserted.MaHang
END
GO
/* cập nhật hàng trong kho sau khi cập nhật đặt hàng */
CREATE TRIGGER trg_CapNhatDatHang on tbl_DatHang after update AS
BEGIN
UPDATE tbl_KhoHang SET SoLuongTon = SoLuongTon -
(SELECT SoLuongDat FROM inserted WHERE MaHang = tbl_KhoHang.MaHang) +
(SELECT SoLuongDat FROM deleted WHERE MaHang = tbl_KhoHang.MaHang)
FROM tbl_KhoHang
JOIN deleted ON tbl_KhoHang.MaHang = deleted.MaHang
end
GO
/* cập nhật hàng trong kho sau khi hủy đặt hàng */
create TRIGGER trg_HuyDatHang ON tbl_DatHang FOR DELETE AS
BEGIN
UPDATE tbl_KhoHang
SET SoLuongTon = SoLuongTon + (SELECT SoLuongDat FROM deleted WHERE MaHang = tbl_KhoHang.MaHang)
FROM tbl_KhoHang
JOIN deleted ON tbl_KhoHang.MaHang = deleted.MaHang
END
Việc mà bạn sử dụng Trigger là không bắt buộc và chúng ta thường tưởng rằng vì thế mà chả ai dùng nó là hoàn toàn sai . Nhưng Trigger theo như mình tìm hiểu qua thì vẫn có rất nhiều nơi sẽ sử dụng nó vào mục đích riêng của họ.
Cảm ơn vì các bạn đã đọc.
Via Viblo