Trigger trong SQL Server

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

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).

1. Trigger trong SQL Server là gì?

👉 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

2. Các loại Trigger trong SQL Server

AFTER Trigger

Chạy sau khi câu lệnh INSERT / UPDATE / DELETE thành công.

INSTEAD OF Trigger

Chạy thay thế cho câu lệnh INSERT / UPDATE / DELETE
→ thường dùng cho VIEW

3. Bảng đặc biệt trong Trigger

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

4. Trigger INSERT

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
END

5. Trigger UPDATE

CREATE TRIGGER trg_UpdateLuong
ON NhanVien
AFTER UPDATE
AS
BEGIN
    IF UPDATE(Luong)
    BEGIN
        PRINT N'Đã thay đổi lương'
    END
END

6. Trigger DELETE

Chặ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)
END

7. Ví dụ so sánh dữ liệu cũ & mới (UPDATE)

CREATE 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

8. Bật / Tắt Trigger

-- Tắt
DISABLE TRIGGER trg_InsertNhanVien ON NhanVien

-- Bật
ENABLE TRIGGER trg_InsertNhanVien ON NhanVien

10. Câu hỏi thường gặp về Trigger

❓ 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

Bài viết liên quan:

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