Bài giảng SQL Server 2005 - Chương VIII: Trigger - Phạm Mạnh Cương

I- Khái niệm:

Trigger là một thủ tục không có tham số

• Một Table có thể chứa nhiều Trigger

• Trigger tự động thực hiện khi một trong 3 phát biểu Insert, Update, Delete thay đổi dữ liệu trên table chứa trigger.

• Trigger chỉ được thực hiện khi phát biểu cập nhật thoả mãn các ràng buộc đa khai báo trên Table. Do đó, Trigger thường được dùng để kiểm tra các ràng buộc mà không thể khai báo trên Table như các ràng buộc liên thuộc tính liên quan hệ, liên bộ liên quan hệ, ràng buộc chu trình.

• Sử dụng lệnh ROLLBACK TRAN trong Trigger để bãi bỏ phát biểu cập nhật khi cần thiết.

 

ppt 18 trang yennguyen 1480
Bạn đang xem tài liệu "Bài giảng SQL Server 2005 - Chương VIII: Trigger - Phạm Mạnh Cương", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng SQL Server 2005 - Chương VIII: Trigger - Phạm Mạnh Cương

Bài giảng SQL Server 2005 - Chương VIII: Trigger - Phạm Mạnh Cương
CHƯƠNG VIII 
TRIGGER 
Giảng viên : Phạm Mạnh Cương 
1 
I- Khái niệm : 
2 
• Trigger là một thủ tục không có tham số 
• Một Table có thể chứa nhiều Trigger 
• Trigger tự động thực hiện khi một trong 3 phát biểu Insert, Update, Delete thay đổi dữ liệu trên table chứa trigger. 
• Trigger chỉ được thực hiện khi phát biểu cập nhật thoả mãn các ràng buộc đa khai báo trên Table . Do đó, Trigger thường được dùng để kiểm tra các ràng buộc mà không thể khai báo trên Table như các ràng buộc liên thuộc tính liên quan hệ , liên bộ liên quan hệ , ràng buộc chu trình . 
• Sử dụng lệnh ROLLBACK TRAN trong Trigger để bãi bỏ phát biểu cập nhật khi cần thiết . 
II- Tạo Trigger cho Table: 
3 
1. Bằng Lệnh Create Trigger 
2. Bằng công cụ quản lý Management Studio 
1- Lệnh Create Trigger: 
4 
CREATE TRIGGER ON 
[WITH ENCRYPTION] 
AFTER | FOR { DELETE , INSERT , UPDATE } 
AS 
• Tập con của { DELETE, INSERT, UPDATE } dùng chỉ định những phát biểu cập nhật nào trên Table sẽ kích hoạt Trigger. 
2- Sử dụng bảng tạm : Inserted và Deleted 
5 
Khi thực hiện Trigger, SQL tự động tạo 2 bảng tạm có cùng cấu trúc với Table được cập nhật: 
• Bảng INSERTED : dùng chứa tạm các mẫu tin mới khi thực hiện lệnh Insert hoặc mẫu tin chứa dữ liệu đa sửa đổi khi thực hiện lệnh Update. 
• Bảng DELETED : dùng chứa tạm các mẫu tin bị xóa khi thực hiện lệnh Delete hoặc mẫu tin chứa dữ liệu cũ khi thực hiện lệnh Update. 
Ta sử dụng dữ liệu trên các table này để thực hiện xử lý bên trong Trigger liên quan đến các mẫu tin vừa mới thêm, sửa hay xóa . 
6 
Ví dụ : Khi thêm 1 CTHD, kiểm tra RB: Một  hóa đơn không có quá 10 chi tiết hóa đơn. 
7 
Create Trigger itrg_SoCTHD On CTHD 
For Insert 
As 
If (Select Count(a.SoHD ) 
From CTHD a Join INSERTED b On a.SoHD = b.SoHD ) >= 10 
Begin 
Print ‘So CTHD Khong the > 10’ 
RollBack Tran 
End 
Ví dụ: Khi thêm chi tiết hóa đơn th ì phải giảm số tồncủa mặt hàng đ ã ghi trên chi tiết hóa đơn. 
8 
Create Trigger itrg_GiamTon On CTHD 
For Insert 
As 
Declare @D int 
Select @D = Count( * ) From MatHang a Join INSERTED b On a.MaMH = b.MaMH 
Where SoTon - b.SL < 0 
If (@D > 0 ) 
Begin 
Print ‘ Khong du hang de ban’ 
RollBack Tran 
Return 
End 
Update MatHang Set SoTon = SoTon - SL 
From INSERTED Where MatHang.MaMH = INSERTED.MaMH 
b) Khi Delete mẫu tin 
9 
Ví dụ: Khi xóa một chi tiết hóa đơn th ì phải tăng sốtồn của mặt hàng đ ã ghi trên chi tiết hóa đơn. 
10 
Create Trigger trg_XoaCTHD On CTHD 
For Delete 
As 
Update MatHang Set SoTon = SoTon + SL 
From DELETED Where MatHang.MaMH = DELETED.MaMH 
Go 
c) Khi Update mẫu tin 
11 
Ví dụ: Khi sửa số lượng trên các chi tiết hóa đơn th ì phảisửa số tồn của mặt hàng đ ã ghi trên chi tiết hóa đơn. 
12 
Create Trigger utrg_SuaCTHD On CTHD For Update 
As 
Declare @D int 
Select @D = Count( * ) From MatHang a, DELETED b, INSERTED c 
Where a.MaMH = b.MaMH And a.MaMH = c.MaMH And SoTon + b.SL - c.SL < 0 
If (@D > 0 ) 
Begin 
Print ‘ Khong du hang de ban’ 
RollBack Tran 
Return 
End 
Update MatHang Set SoTon = SoTon + b.SL - c.SL 
From MatHang a, DELETED b, INSERTED c 
Where a.MaMH = b.MaMH And a.MaMH = c.MaMH 
Ví dụ : Khi sửa SoHD của CTHD, kiểm tra RB: Một  hóa đơn không có quá 10 chi tiết hóa đơn. 
13 
Create Trigger utrg_SoCTHD On CTHD 
For Update 
As 
If (Select Count(a.SoHD ) 
From CTHD a Join INSERTED b On a.SoHD = b.SoHD ) > 10 
Begin 
Print ‘So CTHD Khong the > 10’ 
RollBack Tran 
End 
3- Nhận biết Cột được cập nhật : 
14 
• Hàm Update() : Trả về giá trị TRUE nếu được cập nhật dữ liệu. 
Ví dụ: Khi sửa thông tin chi tiết hóa đơn: 
• Nếu sửa SoHD thì kiểm tra RB "Một hóa đơn không có quá 10 CTHD 
• Nếu sửa SL thì thay đổi số tồn của mặt hàng 
Ví dụ : Sử dụng hàm Update 
15 
Create Trigger utrg_CTHD 
On CTHD For Update 
As 
If Update(SoHD ) 
If (Select Count(a.SoHD ) 
From CTHD a, INSERTED b 
Where a.SoHD = b.SoHD )>=10 
Begin 
	 RollBack Tran 
	Return 
End 
If Update(SL ) 
Begin 
	Declare @D int 
	select @D = Count( * ) 
	From MatHang a, DELETED b, INSERTED c 
	Where a.MaMH = b.MaMH And a.MaMH = 	 c.MaMH 
	And SoTon + b.SL – c.SL < 0 
If (@D > 0 ) 
Begin 
RollBack Tran 
Return 
End 
Update MatHang 
Set SoTon = SoTon + b.SL – c.SL 
From MatHang a, DELETED b, 
INSERTED c 
Where a.MaMH = b.MaMH And 
a.MaMH = c.MaMH 
End 
4- Thực hiện hay không thực hiện Trigger 
16 
ALTER TABLE 
ENABLE | DISABLE TRIGGER ALL | [, n ] 
Ví dụ : Không thực hiện tất cả Triggers của table CTHD 
ALTER TABLE DISABLE TRIGGER ALL 
Ví dụ : Không thực hiện Trigger itrg_SoCTHD và utrg_SoCTHD 
của table CTHD 
ALTER TABLE 
DISABLE TRIGGER itrg_SoCTHD , utrg_SoCTHD 
III- Sửa , Xóa Trigger: 
17 
1. Sửa Trigger: 
ALTER TRIGGER ON 
[WITH ENCRYPTION] 
AFTER | FOR { DELETE, INSERT, UPDATE } 
AS 
2. Xóa Trigger: 
DROP TRIGGER [,n] 
CẢM ƠN 
18 

File đính kèm:

  • pptbai_giang_sql_server_2005_chuong_viii_trigger_pham_manh_cuon.ppt