Hướng dẫn sử dụng Trigger trong Sqlserver
Hôm nay, mình xin hướng dẫn các bạn cách sử dụng Trigger trong Sqlserver . Vậy Trigger là gì và sử dụng chúng như thế nào? Trigger là gì? Trigger có thể hiểu đơn giản là một thủ tục SQL được thực thi ở phía Server khi có một sự kiện xảy ...
Hôm nay, mình xin hướng dẫn các bạn cách sử dụng Trigger trong Sqlserver. Vậy Trigger là gì và sử dụng chúng như thế nào?
Trigger là gì?
Trigger có thể hiểu đơn giản là một thủ tục SQL được thực thi ở phía Server khi có một sự kiện xảy ra như Insert, Delete, hay Update. Tuy nhiên khác với Stored Procedure, Trigger hoàn toàn không có tham số. Chúng ta không thể gọi thực hiện trực tiếp Trigger bằng lệnh EXECUTE như Stored Procedure hoặc bằng bất kỳ một lệnh nào khác, Thay vào đó trigger sẽ được thực hiện một cách tự động.
Trigger cũng có thể gọi thực thi Stored Procedure.
Trigger được lưu trữ và quản lý trong Server Database.
Trigger được dùng trong trường hợp ta muốn kiểm tra các ràng buộc toàn vẹn trong Database.
Ưu điểm của trigger
· Sử dụng trigger để kiểm tra tính toàn vẹn của csdl.
· Trigger có thể bắt lỗi logic nghiệp vụ (business logic) ở mức csdl.
· Có thể dùng trigger là một cách khác để thay thế việc thực hiện những công việc hẹn giờ theo lịch.
· Trigger rất hiệu quả khi được sử dụng để kiểm soát những thay đổi của dữ liệu trong bảng.
Nhược điểm của trigger
· Trigger chỉ là một phần mở rộng của việc kiểm tra tính hợp lệ của dữ liệu chứ không thay thế được hoàn toàn công việc này.
· Trigger hoạt động ngầm ở trong csdl, không hiển thị ở tầng giao diện. Do đó, khó chỉ ra được điều gì xảy ra ở tầng csdl.
· Trigger thực hiện các update lên bảng dữ liệu vì thế nó làm gia tăng lượng công việc lên csdl và làm cho hệ thống chạy chậm lại.
Cú pháp Tạo Trigger
-- SQL Server Syntax Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH [ ,...n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME } ::= [ ENCRYPTION ] [ EXECUTE AS Clause ] ::= assembly_name.class_name.method_name
Mình sẽ viết một ví dụ để các thể có thể sử dụng:
Ví dụ:
- Mình có hai bảng table:
+ Một table lưu điểm thi môn học (tbl_monhoc)
+ Một table lưu kết điểm trung bình và kết quả môn học.
Yêu cầu: Khi nhập điểm môn học vào table tbl_monhoc, thì trigger sẽ tự động chạy câu lệnh tính điểm trung bình các môn học.
Và nếu điểm trung bình môn học >=5 thì kết quả là Đậu, ngược lại thì rớt.
- Dữ liệu ví dụ đầu vào như hình sau:
Và dưới đây là câu lệnh tạo Trigger, mình đã chú thích rất cụ thể, bạn nào không hiểu có thể để lại comment bên dưới.
CREATE TRIGGER tg_them_diem ON [tbl_monhoc]
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
-- Lấy mã sinh viên
DECLARE @masv char(10) = (SELECT masv FROM inserted)
-- inserted là bảng table khi insert vào tbl_monhoc, nói cách khác inserted chính là tbl_monhoc
-- Tính điểm trung bình cộng các môn học cho từng sinh viên
DECLARE @diemtb float = (SELECT AVG(diemso) FROM tbl_monhoc WHERE masv=@masv)
-- Tính kết quả nếu điểm trung bình >=5 Đậu ngược lại thì Rớt
IF @diemtb>=5
UPDATE tbl_ketqua SET diemtrungbinh = @diemtb, ketqua='Đậu' WHERE masv=@masv
ELSE
UPDATE tbl_ketqua SET diemtrungbinh = @diemtb, ketqua='Rớt' WHERE masv=@masv
END
Câu lệnh xóa Trigger:
DROP TRIGGER tg_them_diem
Cám ơn các bạn đã xem bài viết. Hãy like and share giúp mình nha các bạn.
Các bạn có thể Đăng ký kênh Youtube của mình ở góc phải bên trên màn hình.
Mọi thắc mắc về bài viết các bạn có thể hỏi ở http://hoidap.laptrinhvb.net để được support.