bai 9 Trigger

18 580 6
bai 9 Trigger

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRIGGER Sau học này, sinh viên có thể:  Hiểu trigger gì, cơng dụng  Tạo trigger  Xoá trigger  Thay đổi trigger Nội dung học Giới thiệu Triggers Định nghĩa Triggers Triggers làm việc Các ví dụ Triggers Các lưu ý Trigger      Trigger stored procedure đặc biệt gọi tự động user cập nhật liệu table Được kết hợp với table: Được định nghĩa table cụ thể Được gọi tự động: Khi có thao tác cập chật liệu table (insert, update, delete) trigger thao tác tương ứng tự động thực Khác với procedure, trigger gọi trực tiếp, không nhận tham số Là phần transaction: lệnh trigger xem single transaction, roll back từ chổ trigger Sử dụng trigger để làm gì?     Để thực cascade updates cascade deletes qua table quan hệ database Ép buộc tính tồn vẹn liệu phức tạp : Thực ràng buộc có tham chiếu đến column nhiều table Định nghĩa Custom Error Messages: Dùng trigger để trả chuỗi thông báo trạng thái hàng động Bảo trì liệu khơng chuẩn hố: ! Triggers hoạt động nào?       Triggers thực tự động sau lệnh INSERT, UPDATE, DELETE thực table mà trigger định nghĩa Còn constraints INSTEAD OF trigger kiểm tra trước lệnh INSERT, UPDATE, DELETE thực Constraints kiểm tra trước Một table có nhiều Triggers cho action Một trigger định nghĩa cho nhiều action Khi có nhiều trigger table, table owner dùng procedure hệ thống sp_settriggerorder để định trigger đầu trigger cuối để thực thi Thứ tự trigger cịn lại khơng thể xếp User phải có quyền để thực tất lệnh mà định nghĩa Triggers Table Owners tạo Triggers Views Temporary Tables tham chiếu đến view temporary Triggers hoạt động   Triggers trả kết Triggers điều khiển multi-row actions: hành động INSERT, UPDATE, DELETE gọi trigger ảnh hưởng lên nhiều dịng liệu, Ta chọn:   Xử lý tất dòng với trường hợp dòng ảnh hưởng phải thoả điều kiện trigger Xử lý dòng thỏa điều kiện Tạo trigger CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { {{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE] } [ WITH APPEND ] AS } } [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ n ] }] sql_statement [ n ] Tham số (1)     Table | view : tên view/table mà tigger thực có action tương ứng WITH ENCRYPTION: mã hoá nột dung text lệnh create trigger table syscomments AFTER: Trigger gọi tất hành động thực xong Các kiển tra constrain cascade kiểm tra hoàn thành trước trigger thực Default AFTER có từ khố FOR định AFTER trigger định nghĩa view INSTEAD OF: định trigger đựoc thực thay cho action trigger INSTEAD OF triggers không cho phép cập nhật liệu view có WITH CHECK OPTION Tham số (2)   { [DELETE] [,] [INSERT] [,] [UPDATE] } : định action gắn với trigger Đối với INSTEAD OF triggers, action DELETE không cho phép table mà có relationship mà định CASCADE ON DELETE Tương tự, action UPDATE khơng cho phép table có relationships mà CASCADE ON UPDATE Table deleted inserted logical tables Chúng có cấu trúc giống với table mà trigger định nghĩa Chúng giữ dòng giá trị cũ mà thay đổi action user Ta có truy xuất liệu table định nghĩa trigger Tham số (3)     Các giá trị kiểu text, ntext, image table inserted deleted không truy xuất Khi trigger mức 65, giá trị null trả cột có kiểu text, ntext, image table inserted deleted cột cho phép null; chuỗi zero-length trả cột null IF UPDATE (column): kiểm tra action update cột định, khôgn dùng cho action delete With Append: Chèn thêm trigger vào trigger có trước 10 Ví dụ Use Northwind GO CREATE TRIGGER Empl_Delete ON Employees FOR DELETE AS IF (SELECT COUNT(*) FROM Deleted) > BEGIN RAISERROR( 'You cannot delete more than one employee at a time.', 16, 1) ROLLBACK TRANSACTION END 11 Những lệnh sau không dùng định nghĩa trigger 12 Ví dụ (1) USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'reminder' AND type = 'TR') DROP TRIGGER reminder GO CREATE TRIGGER reminder ON titles FOR INSERT, UPDATE AS RAISERROR (50009, 16, 10) GO 13 Alter trigger ALTER TRIGGER trigger_name ON table [WITH ENCRYPTION] {{FOR {[,] [DELETE] [,] [UPDATE] [,][INSERT]} AS sql_statement [ n] } | {FOR {[,] [INSERT] [,] [UPDATE]} AS IF UPDATE (column) [{AND | OR} UPDATE (column) [, n]] sql_statement [ n] } } 14 Xoá trigger DROP TRIGGER trigger_name 15 Bài tập áp dụng (QLVT)     Tạo trigger để insert record vào table CHITIETHOADON, cập nhật lại SLTON vật tư table VATTU Tạo trigger để khơng cho phép hố đơn có nhiều chi tiết hố đơn Tạo trigger khơng cho phép hai vật tư trùng tên Tạo trigger để không cho phép xoá lúc nhiều khách hàng 16   Tạo trigger để khơng cho phép xố vật tư mà có chi tiết hố đơn vật tư Tạo trigger để kiểm tra số lượng bán vật tư phải nhỏ số lượng tồn kho 17 create trigger t1 on chitiethoadon1 for insert as declare @sl int, @mavt varchar(10) select @sl = sl, @mavt = mavt from inserted update vattu1 set slt=slt- @sl where mavt =@mavt 18 ...Nội dung học Giới thiệu Triggers Định nghĩa Triggers Triggers làm việc Các ví dụ Triggers Các lưu ý Trigger      Trigger stored procedure đặc biệt gọi tự động user... thống sp_settriggerorder để định trigger đầu trigger cuối để thực thi Thứ tự trigger cịn lại khơng thể xếp User phải có quyền để thực tất lệnh mà định nghĩa Triggers Table Owners tạo Triggers Views... n] } } 14 Xoá trigger DROP TRIGGER trigger_name 15 Bài tập áp dụng (QLVT)     Tạo trigger để insert record vào table CHITIETHOADON, cập nhật lại SLTON vật tư table VATTU Tạo trigger để khơng

Ngày đăng: 12/01/2013, 15:40

Từ khóa liên quan

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

Tài liệu liên quan