Hôm nay TheCodeRoot sẽ hướng dẫn cách sử dụng Trigger thông qua ví dụ đơn giản. Ở đây chúng ta sẽ tạo một table backup để lưu lại data sau các thao tác insert, update, delete ở table chính cũng như thể hiện thao tác tương ứng được thực hiện.
Hôm nay TheCodeRoot sẽ hướng dẫn cách sử dụng Trigger thông qua ví dụ đơn giản. Ở đây chúng ta sẽ tạo một table backup để lưu lại data sau các thao tác insert, update, delete ở table chính cũng như thể hiện thao tác tương ứng được thực hiện.
1. Tạo table backup:
Chúng ta tạo table EmployeeArchieved để lưu lại thông tin ở table Employee, trong đó Action sẽ thể hiện thao tác tương ứng Insert/Update/Delete.
CREATE TABLE EmployeeArchieved (
EmployeeID bigint,
EmployeeName varchar(64),
FullName nvarchar(64),
HandPhone varchar(32),
CreateDate datetime,
Action nvarchar(16)
)
2. Tạo Trigger:
Tiếp theo các bạn tạo trigger trên table chính cho cả 3 thao tác Insert/Update/Delete như bên dưới:
CREATE TRIGGER trgEmployee
ON dbo.Employee
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
IF EXISTS (SELECT 1 FROM inserted) AND NOT EXISTS (SELECT 1 FROM deleted)
INSERT INTO dbo.EmployeeArchieved(EmployeeID, EmployeeName, FullName, HandPhone, CreateDate, Action)
SELECT EmployeeID, EmployeeName, FullName, HandPhone, CreateDate, 'Insert' AS Action
FROM inserted
ELSE
IF NOT EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
INSERT INTO dbo.EmployeeArchieved(EmployeeID, EmployeeName, FullName, HandPhone, CreateDate, Action)
SELECT EmployeeID, EmployeeName, FullName, HandPhone, CreateDate, 'Delete' AS Action
FROM deleted
ELSE
INSERT INTO dbo.EmployeeArchieved(EmployeeID, EmployeeName, FullName, HandPhone, CreateDate, Action)
SELECT EmployeeID, EmployeeName, FullName, HandPhone, CreateDate, 'Update' AS Action
FROM inserted
END
GO
Lưu ý:
- Khi insert dữ liệu sẽ được lưu trong table inserted
- Khi delete dữ liệu sẽ được lưu trong table deleted
- Khi update dữ liệu trước khi thay đổi sẽ được lưu trong table deleted, dữ liệu sau khi thay đổi sẽ được lưu trong table inserted
Sau khi tạo xong Trigger mới sẽ thể hiện như hình:
3. Insert dữ liệu ở table chính:
Tiếp theo các bạn thêm 1 nhân viên mới như bên dưới:
INSERT INTO dbo.Employee (EmployeeName, Password, FullName, HandPhone, DepartmentID, PositionType, RoleMasterID, CreateDate, Status)
SELECT 'nhi.nguyen', '123456', 'Nguyen Ai Nhi', 0979123456, 1, 2, 3, GETDATE(), 1
Các bạn để ý sẽ thấy 2 dòng affect lý do là 1 dòng được insert vào bảng chính và 1 dòng insert vào bảng phụ. Xem hình bên dưới chúng ta sẽ thấy table backup xuất hiện 1 record với Action Insert:
4. Update dữ liệu table chính:
UPDATE dbo.Employee
SET FullName = N'Nguyễn Nhi'
WHERE EmployeeName = 'nhi.nguyen'
Kiểm tra table phụ các bạn sẽ thấy xuất hiện 1 record tương ứng với thao tác update như hình dưới:
5. Xóa dữ liệu bảng chính:
DELETE dbo.Employee WHERE EmployeeName = 'nhi.nguyen'
Kiểm tra table backup:
Các bạn lưu ý là việc insert vào table chính và table backup sẽ được thực hiện trong cùng 1 transaction, do đó các bạn nên cân nhắc trong việc sử dụng trigger để tránh ảnh hưởng performance thao tác ở table chính.
Chúc các bạn thành công!
AutoCode.VN