Trigger SQLServer hqtcsdl

8 446 0
Trigger SQLServer hqtcsdl

Đang tải... (xem toàn văn)

Thông tin tài liệu

16/04/2015 Khái niệm Trigger (trên View, Table) Trigger dạng thủ tục đặc biệt (không có tham số), tự động thực thi thực lệnh thay đổi liệu (INSERT, UPDATE hay DELETE) CSDL (Trên SQL Server) Khái niệm Trigger Lệnh tạo Trigger (T-SQL)  Dùng Trigger:  Để thay đổi liệu nhiều table có liên quan  Giúp mở rộng khả kiểm tra ràng buộc toàn vẹn  …  Các loại Trigger: UPDATE Trigger, INSERT Trigger, DELETE Trigger CREATE TRIGGER trigger_name ON { table | view } [ WITH [ , n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS { sql_statement [ ; ] [ , n ]} 16/04/2015 Tên Trggier cần tạo CREATE TRIGGER trigger_name ON { table | view } CREATE TRIGGER trigger_name ON { table | view } { FOR | AFTER | INSTEAD OF } { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } … AS { sql_statement } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } … AS { sql_statement } Tạo trigger Table hay view nào? CREATE TRIGGER trigger_name ON { table | view } CREATE TRIGGER trigger_name ON { table | view } { FOR | AFTER | INSTEAD OF } { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } … AS { sql_statement } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } … Kiểu trigger cần tạo AS { sql_statement } Hành động kích hoạt trigger 16/04/2015 Các kiểu Trigger CREATE TRIGGER trigger_name ON { table | view }  AFTER trigger:  Chạy sau hành động kiểm tra liệu (rule, constraint): Thực sau hành động INSERT, UPDATE hay DELETE thực (FOR)  Chỉ định nghĩa AFTER trigger Table { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } … AS { sql_statement }  INSTEAD OF trigger Các lệnh nội dung trggier Cơ chế hoạt động INSERT Trigger  Thay cho hành động kích hoạt trigger (do chạy trước hành động kiểm tra liệu (rule, constraint)  Có thể định nghĩa view (với nhiều table sở) 10  Không dùng View có WITH CHECK OPTION Cơ chế hoạt động INSERT Trigger (AFTER/FOR)  Khi thực việc thêm dòng vào table  kích hoạt trigger (INSERT Trigger), liệu dòng lưu trữ vào Table (trong RAM) có tên INSERTED  Table INSERTED có cấu trúc giống hoàn toàn với Table gắn trigger Nội dung Table tạm Chứa dòng thêm vào  11 12 16/04/2015 Cơ chế hoạt động DELETE Trigger Cơ chế hoạt động DELETE Trigger  Khi DELETE dòng từ table  kích hoạt trigger (DELETE Trigger), liệu dòng vừa bị xóa lưu vào Table (trong RAM) có tên DELETED  Table DELETED có cấu trúc giống hoàn toàn với Table gắn trigger   Nội dung Table tạm Chứa dòng bị xóa từ Table R 13 Cơ chế hoạt động UPDATE Trigger  Khi UPDATE nội dung dòng từ table  kích hoạt trigger (UPDATE Trigger)  Sử dụng table trung gian DELETED (lưu nội dung dòng trước cập nhật) INSERTED (lưu nội dung dòng sau cập nhật) 15 14 Cơ chế hoạt động UPDATE Trigger UPDATE 16 16/04/2015 Ví dụ: Xét CSDL QLBH (trong tập) Hàm UPDATE()  Tạo Trigger table CTHD cho hành động Insert, kiểm tra RBTV: hoá đơn (cùng SOHD) có tối đa 10 mục hàng CREATE TRIGGER tr_cthd_insert ON cthd FOR insert AS IF EXISTS(SELECT cthd.sohd FROM inserted INNER JOIN cthd ON cthd.SOHD=inserted.sohd GROUP BY cthd.sohd HAVING COUNT(*)>10) BEGIN RAISERROR (N'Mỗi hóa đơn có 10 dòng',16,1) ROLLBACK TRAN END  Sử dụng hàm UPDATE(column_name)  Kiểm tra cột thay đổi liệu  Cú pháp: UPDATE(column)  Hàm UPDATE() không dùng DELETE trigger 17 Hàm UPDATE() 18 Ví dụ:  Tạo Trigger table CTHD cho hành động UPDATE, kiểm tra RBTV: hoá đơn (cùng SOHD) có tối đa 10 mục hàng  Cấu trúc thường dùng: CREATE TRIGGER trigger_name ON table_name …… AS IF UPDATE(column_name) [{AND|OR} UPDATE(column_name)…] sql_statements CREATE TRIGGER trg02_CTHD ON CTHD AFTER INSERT AS IF UPDATE(SOHD) IF EXISTS (SELECT * FROM INSERTED WHERE (SELECT COUNT(*) FROM CTHD WHERE CTHD.SOHD=INSERTED.SOHD)>10) BEGIN RAISERROR (N'Một hóa đơn có nhiều 10 mặt hàng',16,1) ROLLBACK TRAN END 19 20 16/04/2015 Ví dụ INSTEAD OF trigger Ví dụ INSTEAD OF trigger CREATE TRIGGER trg_CTHD ON CTHD INSTEAD OF INSERT AS PRINT N‘các dòng thêm vào table INSERTED PRINT N‘Không có dòng thêm vào CTHD CREATE TRIGGER trg_CTHD ON INSERT INSTEAD OF INSERT AS INSERT INTO CTHD (SOHD,MAMH,SOLGBAN,DONGIABAN) SELECT SOHD,MAMH,SOLGBAN,DONGIABAN FROM INSERTED PRINT ‘Dữ liệu thêm vào table CTHD 21 22 Sửa đổi Trigger sử dụng giao diện Lệnh Sửa đổi nội dung Trigger ALTER TRIGGER trigger_name ON { table | view } [ WITH [ , n ] ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS { sql_statement [ ; ] [ , n ]} Right Click 23 24 16/04/2015 Lệnh xóa Trigger Xóa Trigger sử dụng giao diện DROP TRIGGER  Ví dụ: USE Vidu GO DROP TRIGGER trg01_CTHD GO Right Click 25 26 Vô hiệu hóa Trigger  Làm cho trigger tồn không hoạt động  Cú pháp: ALTER TABLE table_name DISABLE TRIGGER ALL | trigger_name Table_name: Tên table có gắn trigger ALL: Tất trigger table_name bị vô hiệu hóa trigger_name: Chỉ trigger có tên bị vô hiệu hóa 27 Vô hiệu hóa Trigger  Ví dụ: - Vô hiệu hóa tất trigger table CTPN CSDL hành ALTER TABLE CTPN DISABLE TRIGGER ALL - Chỉ vô hiệu hóa trigger có tên trg_CTPN table CTPN CSDL hành ALTER TABLE CTPN DISABLE TRIGGER trg_CTPN 28 16/04/2015 Cho phép Trigger hoạt động lại (sau bị vô hiệu hóa)  Cú pháp: ALTER TABLE table_name ENABLE TRIGGER ALL | trigger_name Trong đó: Table_name: Tên table có gắn trigger ALL: Tất trigger table_name có hiệu lực trở lại trigger_name: Chỉ trigger có tên có hiệu lực trở lại 29 Vô hiệu hóa/cho phép hoạt động động Trigger (sử dụng giao diện) 30 31

Ngày đăng: 25/10/2016, 20:42

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan