Trigger trong SQL Server là một loại đối tượng CSDL tự động chạy khi có sự kiện xảy ra trên bảng hoặc view (INSERT, UPDATE, DELETE).
👉 Trigger giống như “cái bẫy”
Trigger là gì? ví dụ như con thú chạy đến chạm cái bẫy, thì cái bẫy ra thực hiện hành động nào đó.
Trigger trong SQL Server là gì ?, ví dụ khi ta thêm dữ liệu vào 1 table nó đó, thì ta đặt 1 cái 'bẫy' là khi thêm mới dữ liệu sẽ thực hiện một câu lệnh nào đó trong sql server.
Khi ai đó thêm / sửa / xóa dữ liệu, dữ liệu ở đâu là table, thì trigger sẽ tự động chạy mà không cần gọi.
📌 Ví dụ:
Khi thêm nhân viên → tự ghi log
Khi xóa dữ liệu → chặn lại
Khi cập nhật → kiểm tra điều kiện
Chạy sau khi câu lệnh INSERT / UPDATE / DELETE thành công.
Chạy thay thế cho câu lệnh INSERT / UPDATE / DELETE
→ thường dùng cho VIEW
inserted Dữ liệu mới được thêm / cập nhật
deleted Dữ liệu cũ bị xóa / trước khi cập nhật
📌 SQL Server không xử lý từng dòng, mà xử lý theo tập bản ghi
Ví dụ: Khi thêm nhân viên → ghi log
CREATE TRIGGER trg_InsertNhanVien
ON NhanVien
AFTER INSERT
AS
BEGIN
INSERT INTO NhatKy (NoiDung, NgayTao)
SELECT
N'Đã thêm nhân viên: ' + TenNV,
GETDATE()
FROM inserted
ENDCREATE TRIGGER trg_UpdateLuong
ON NhanVien
AFTER UPDATE
AS
BEGIN
IF UPDATE(Luong)
BEGIN
PRINT N'Đã thay đổi lương'
END
ENDChặn không cho xóa dữ liệu
CREATE TRIGGER trg_KhongXoa
ON NhanVien
INSTEAD OF DELETE
AS
BEGIN
RAISERROR (N'Không được phép xóa nhân viên!', 16, 1)
ENDCREATE TRIGGER trg_SoSanhLuong
ON NhanVien
AFTER UPDATE
AS
BEGIN
SELECT
d.Luong AS LuongCu,
i.Luong AS LuongMoi
FROM deleted d
JOIN inserted i ON d.MaNV = i.MaNV
END-- Tắt
DISABLE TRIGGER trg_InsertNhanVien ON NhanVien
-- Bật
ENABLE TRIGGER trg_InsertNhanVien ON NhanVien❓ Trigger có chạy khi INSERT nhiều dòng không?
✅ Có → inserted chứa nhiều dòng
❓ Trigger có rollback được không?
✅ Có, nếu RAISERROR hoặc ROLLBACK
Hướng dẫn trigger trong SQL Server ứng dụng vào lập trình, quản lý dữ liệu như thế nào