Swift

"Blogger chuyên về SQL Server: trigger, view, procedure"

Chủ Nhật, 4 tháng 12, 2016

Trigger và 3 ví dụ cơ bản về trigger trong SQL Server

TRIGGER TRONG SQL VÀ 3 VÍ DỤ CƠ BẢN VỀ TRIGGER


Trigger là gì? Viết 1 câu lệnh trigger cần phải biết những gì? Cú pháp tạo trigger như thế nào? 3 ví dụ cơ bản về trigger trong SQL Server.


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(MaspMahd, 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
 declare @count_nvnam nvarchar (9)
 set        @count_nvnam = ( select count(Manv) from inserted where Gt='nam')
 declare @count_nvnu nvarchar (9)
 set       @count_nvnu = ( select count(Manv) from NHANVIEN where GT='nu')
  if (@count_nvnam>@count_nvnu)
   begin
        raiserror (' So nv nam phai nho hon nv nu',16,1)
   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
 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
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:
  • 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
        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

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

6 nhận xét:

  1. vd3 chỗ @masp = (select top 1... ) em ko hiểu ạ

    Trả lờiXóa
  2. uhm, 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óa
  3. Bà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óa
  4. nếu có thêm nhiều bài tập về trigger nữa thì tốt.
    Tks!

    Trả lờiXóa
  5. mình muốn code show thông báo khi đã code xong thì làm ntn ?

    Trả lờiXóa
  6. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa

About Us

"Name: Thu Trần

DOB:26/11/1996

ĐH YeungNam - Korea"

Recent

Random