- [DATABASE] Copy cấu trúc bảng table trong sqlserver
- [C#] Copy File Share trong mạng Lan với chứng thực tài khoản Domain với tên đăng nhập và mật khẩu
- [C#] Hướng dẫn tích hợp gõ tiếng việt VietKey vào Winform
- [C#] Ẩn ứng dụng winform từ Apps vào Background Process trên Task Manager
- [SQLSERVER] Xử lý ngoại lệ sử dụng TRY...CATCH và RAISEERROR
- [C#] Bắt sự kiện bàn phím chuột bên ngoài ứng dụng winform sử dụng thư viện MouseKeyHook
- [DEVEXPRESS] Đặt mật khẩu và bỏ mật khẩu tập tin file PDF
- [C#] Thêm ứng dụng vào Taskbar sử dụng SharpShell DeskBand
- [C#] Hướng dẫn thêm text vào hình ảnh icon winform
- [C#] Chia sẽ tổng hợp source code đồ án về Csharp
- [C#] Hướng dẫn viết ứng dụng quay màn hình video winform, Screen Recorder
- [C#] Hướng dẫn sử dụng thư viện Input Simulator để làm việc với Keyboard, Mouse Virtual
- [DEVEXPRESS] Hướng dẫn tích Filter Contain khi click chuột phải vào cell selection trên Gridview
- [C#] Tra cứu mã số thuế cá nhân bằng CMND hoặc CCCD
- [C#] Convert hình ảnh image thành Blurhash sử dụng trong loading image winform
- [POWERSHELL] Script sao lưu backup và nén database sqlserver
- [C#] Giới thiệu thư viện Autofac Dependency Injection
- [C#] Hướng dẫn tạo Windows Services đơn giản Winform
- [C#] Một click chuột điều khiển máy tính từ xa sử dụng Ultraviewer
- Hướng dẫn đóng gói phần mềm sử dụng Powershell biên dịch script thành file exe
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 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.