TRIGGER TRONG SQL VÀ 3 VÍ DỤ CƠ BẢN VỀ TRIGGER
Trigger là gì?
Trigger trong SQL server được định nghĩa là một dạng đặc biệt của thủ tục lưu (Store procedure), chứa các lệnh cần thực thi nhằm thực hiện một hành động nào đó do người lập trình viết.Nói cách khác, trigger là 1 đoạn mã gắn liền với bảng. Khi bảng thay đổi thì trigger tự động kích hoạt tượng ứng.
Lưu ý gì khi tạo trigger trong SQL server?
Trước khi tạo trigger cần phải xác định được những câu hỏi sau:- Tên của trigger? [ phải là duy nhất trọng 1 CSDL]
- Áp dụng tới bảng nào hay view nào?
- trigger loại nào? [instead of | after]
- thực hiện thao tác gì trên trigger?
- Khi kích hoạt trên trigger thì lệnh nào sẽ được thực thi?
Cú pháp tạo trigger :
CREATE TRIGGER <tên trigger>ON <ten_bang,view>
[with encryption]
{for|after |instead of} {insert, update, delete}
AS
BEGIN
< các câu lệnh >
END
GO
Dưới đây là cơ sở dữ liệu sẽ áp dụng trong bài:
- NHASANXUAT(Masx, Tensx)
- CHUCVU(Macv, Tencv)
- KHACHHANG(Makh, Hoten, Diachi, SoDT)
- SANPHAM( Masp, Tensp, Gia, Solg, Tgbaohanh, Masx)
- PHIEUNHAP(Mapn, Tonggia, Ngaynhap, Manv)
- SP_PN(Masp, Mapn, SoLuong)
- HOADON(Mahd, Ngaylap, Thanhtien, Manv, Makh)
- SP_HD(Masp, Mahd, Slg)
- PHIEUBAOHANH(Mapbh, Ngaybd, Ngaykt, Masp)
- NHANVIEN(Manv, Tennv, Gt, NS, DC, SDT, Macv)
3 ví dụ về trigger trong SQL
VD1: Số nv nam phải nhỏ hơn số nv nữ
Phân tích vd1:
- Tên của trigger :trigger1
- Áp dụng tới bảng nào hay view nào: bảng NHANVIEN
- trigger loại nào? [instead of | after] :insert, update
- thực hiện thao tác gì trên trigger: kiểm tra ràng buộc ( số nv nam luôn nhỏ hơn số nv nữ) sau khi thêm hoặc sửa đổi giới tính nhân viên
- Khi kích hoạt trên trigger thì lệnh nào sẽ được thực thi?: so sánh số nv nam và nữ trong công ty
[code]
create trigger trigger1
on NHANVIEN
after insert, update
as
begin
begin
declare @count_nvnam nvarchar (9)
set @count_nvnam = ( select count(Manv) from inserted where Gt='nam')
set @count_nvnam = ( select count(Manv) from inserted where Gt='nam')
if (@count_nvnam>@count_nvnu)
begin
raiserror (' So nv nam phai nho hon nv nu',16,1)
end
end
end
go
VD2: Tuổi của nhân viên mới không quá 45 tuổi
Phân tích vd2:
- Tên của trigger :trigger2
- Áp dụng tới bảng nào hay view nào: bảng NHANVIEN
- trigger loại nào? [instead of | after] :insert
- thực hiện thao tác gì trên trigger: kiểm tra ràng buộc ( tuổi của nhân viên không quá 45) sau khi thêm nhân viên mới
- Khi kích hoạt trên trigger thì lệnh nào sẽ được thực thi?: so sánh tuổi nhân viên mới có quá 45 tuổi không.
[code]
create trigger trigger2
on NHANVIEN
after insert
as
begin
begin
declare @tuoi_nvmoi int
set @tuoi_nvmoi = ( select year(getdate())-year(Ns) as tuoi_nv from inserted)
if (@tuoi_nvmoi > 45)
begin
raiserror (' nhan vien khong duoc qua 45 tuoi',16,1)
end
end
end
go
VD3: Tạo trigger thay đổi số lượng hàng tồn khi nhập thêm hàng
Phân tích vd3:
[code]
- Tên của trigger? : trigger 3
- Áp dụng tới bảng nào hay view nào : SP_PN
- trigger loại nào? [instead of | after] : after insert
- thực hiện thao tác gì trên trigger?: lấy số lượng nhập của sản phẩm
- Khi kích hoạt trên trigger thì lệnh nào sẽ được thực thi?: cập nhập số lượng sản phẩm trên bảng SANPHAM
[code]
create trigger trigger3
on SP_PN
after insert
as
begin
begin
declare @masp nvarchar(9)
set @masp = (select top 1 masp from inserted )
declare @soluongnhap int
set @soluongnhap = (select Soluong from SP_PN)
UPDATE SANPHAM
SET Solgton=Solgton+@soluongnhap
where @masp =Masp
end
go
end
go
Xem thêm: 6 ví dụ về view trong SQL server
p/s:Nếu bạn là người mới bắt đầu tìm tòi về trigger trong SQL Server, tôi tin chắc bài viết trên đây của mình sẽ ít nhiều giúp được được bạn. Chúc bạn thành công!!!.
p/s:Nếu bạn là người mới bắt đầu tìm tòi về trigger trong SQL Server, tôi tin chắc bài viết trên đây của mình sẽ ít nhiều giúp được được bạn. Chúc bạn thành công!!!.
vd3 chỗ @masp = (select top 1... ) em ko hiểu ạ
Trả lờiXóauhm, rất xin lỗi vì đến giờ rep được cho bạn :). Câu lệnh có nghĩa là bạn nhập vào 1 sản phẩm nào đó thì số lượng sản phẩm chỉ cộng thêm vào đúng cái sản phẩm có mã bạn vừa nhập chứ không phải là sản phẩm nào khác:)
Trả lờiXóaBài viết dễ hiểu. chủ thớt có thể đăng 1 bài ví dụ về procedure với 1 số bài về trigger nữa k ạ?
Trả lờiXóanếu có thêm nhiều bài tập về trigger nữa thì tốt.
Trả lờiXóaTks!
mình muốn code show thông báo khi đã code xong thì làm ntn ?
Trả lờiXóaNhận xét này đã bị tác giả xóa.
Trả lờiXóa