You are on page 1of 3

--- TRIGGER ---

1. Định nghĩa:

- Trigger sẻ được áp dụng đối với bảng nào


- Trigger được kích hoạt khi câu lệnh nào được thực thi trên bảng:
Insert/update/delete,...
- Trigger sẻ làm gì khi kích hoạt

2. Cú pháp:

Create Trigger tên_Trigger


On tên_Bảng
for [Insert, update, delete]
as
các câu lệnh

- Chuẩn SQL định nghĩa hai bảng logic INSERTED và DELETED để sử dụng trong các trigger.
- Cấu trúc của hai bảng này tương tự như cấu trúc của bảng mà trigger tác động.
- Dữ liệu trong hai bảng này tùy thuộc vào câu lệnh tác động lên bảng làm kích hoạt trigger, cụ thể
trong các trường hợp sau:
+ Khi câu lệnh Delete được thực thi trên bảng, các dòng dữ liệu bị xóa sẻ được sao chép
vào trong bảng DELETED. Bảng Inserted lúc này không có dữ liệu.
+ Dữ liệu trong bảng Inserted sẻ là dòng dữ liệu được bổ sung vào bảng gây nên sự kích
hoạt đối với trigger bằng câu lệnh Insert. Bảng Delete trong trường hợp này không có dữ
liệu.
+ Khi câu lệnh Update được thực thi trên bảng, các dòng dữ liệu cũ chịu sự tác động của
câu lệnh sẻ được sao chép vào bảng DELETED, còn trong bảng Inserted sẻ là các dòng dữ
liệu sau khi đã được cập nhật.

3. ROLLBACK TRANSACTION:

Formatted: Normal, Indent: Left: 0"

- Trong một trigger, để huỷ bỏ tác dụng của câu lệnh làm kích hoạt trigger, ta sử
dụng câu lệnh: Formatted: Indent: Left: 0.5"
ROLLBACK TRANSACTION Formatted: Font color: Text 1, Text Outline, Shadow
Formatted: Centered, Indent: Left: 0.5"

THỰC HÀNH
1. Thêm mới một mặt vào vào CSDL – ACTION “INSERT”:
Insert into mathang
values('H8', N'Nước tẩy',30)

 Lúc này SQL sẻ tạo ra bảng INSERTED như sau:

MAHANG TENHANG SL
H8 Nước tẩy 30

2. Khi xóa MATHANG ‘H8’ – Action “DELETE”:


Delete mathang
where mahang = 'H8'

 Lúc này SQL sẻ tạo ra bảng Deleted như sau:

MAHANG TENHANG SL
H8 Nước tẩy 30

3. Khi cập nhật mặt hàng H8:


update mathang
set soluong = 40, tenhang = N'Nước xã'
where mahang = 'H8'

 Lúc này SQL sẻ tạo ra bảng Inserted và Deleted như sau: Formatted: Font: (Default) +Body (Calibri), 11 pt, Font
color: Auto
- Bảng Inserted: Lưu thông tin dữ liệu mới được cập nhật
Formatted: Indent: Left: 1", No bullets or numbering
MAHANG TENHANG SL Formatted: Font: (Default) +Body (Calibri), 11 pt, Font
H8 Nước xã 40 color: Auto
- Bảng Deleted lưu thông tin dữ liệu cũ Formatted: Bulleted + Level: 1 + Aligned at: 0.25" +
Indent at: 0.5"
MAHANG TENHANG SL
Formatted: Bulleted + Level: 1 + Aligned at: 0.25" +
H8 Nước tẩy 30
Indent at: 0.5"
- BÀI 1:
Tạo một trigger có tên: tg_nhatkybanhang_insert: có chức năng tự động giảm số lượng hàng
hiện có khi một mặt hàng nào đó được bán (tức là khi câu lệnh Inserted được thực thi trên bảng
NhatKyBanHang).

Formatted Table
create trigger tg_nhatkybanhang_insert
on nhatkybanhang for insert
as
begin
declare @MaMathang nvarchar(5)
declare @slCanMua int

select @MaMathang = mahang from inserted


select @slCanMua = soluong from inserted

if(@slCanMua > (select soluong from mathang where mahang = @MaMathang))


rollback transaction
-- Nếu số lương hàng cần mua > số lượng hàng còn hiện tại thì hủy thực
thi câu lệnh Insert
else
update mathang
set soluong = soluong - @slCanMua
where mahang = @maMatHang
end

You might also like