• Không có kết quả nào được tìm thấy

Các bảng dữ liệu trung gian

N/A
N/A
Protected

Academic year: 2022

Chia sẻ "Các bảng dữ liệu trung gian"

Copied!
5
0
0

Loading.... (view fulltext now)

Văn bản

(1)

2/8/2018 Microsoft SQL Server 2005 1

Bài 9: Trigger

2/8/2018 Microsoft SQL Server 2005 2

Khái niệm

n Trigger là gì:

Là một thủ tục nội tại đặc biệt không có tham số

Gắn liền với bảng/bảng ảo trong CSDL. Khi xóa bảng dữ liệu thì các Trigger của bảng sẽ bị xóa

Không thể gọi thực thi bằng lệnh Execute hay bất kỳ một lệnh nào khác, mà được gọi một cách tự động khi có biến cố được thực thi trong cơ sở dữ liệu (tại bảng liên kết với nó)

Hoạt động theo cơ chế giao tác: Khi không muốn lưu lại các thao tác cập nhật trước đó có thể sử dụng Rollback Transaction

Khái niệm

n Hạn chế của Trigger: Trong cú pháp của Trigger, không sử dụng các cú pháp làm thay đổi cấu trúc của cơ sở dữ liệu: Create, Alter, Drop

Phân loại Trigger

n Các Trigger được phân làm 2 loại

- Loại After: gồm

+ DML Trigger: kiểm soát sự thay đổi dữ liệu + DDL Trigger: kiểm soát sự thay đổi cấu trúc của cơ

sở dữ liệu

- Loại Instead of (hay Before)

(2)

2/8/2018 Microsoft SQL Server 2005 5

Các bảng dữ liệu trung gian

nBảng Inserted:Lưu các dòng dữ liệu được thêm mới trong các hành động Insert/Update

nBảng dữ liệu Deleted: Lưu các dòng dữ liệu bị xóa bởi các lệnh Delete

nĐặc điểm:

- Cấu trúc giống với cấu trúc bảng dữ liệu thực sự được cập nhật dữ liệu

- Chỉ tồn tại trong Ram

- Không thể tham chiếu trực tiếp trong các thủ tục nội tại thông thường

2/8/2018 Microsoft SQL Server 2005 6

Làm việc với Trigger

n Tạo mới một Trigger: Nhập cú pháp tạo mới Trigger vào màn hình Query

Create Trigger Tên_Trigger on Tên_bảng/bảng_ảo For/Instead of/After Insert, [Update], [Delete]

As Các_lệnh

Lưu ý:Tên Trigger là duy nhất trong CSDL

2/8/2018 Microsoft SQL Server 2005 7

Ví dụ:

Yêu cầu: Tạo thêm cột Thanhtien cho bảng CTPNHAP, sau đó tạo trigger cập nhật giá trị tự động cho cột Thanhtien

Xét lời giải sau:

Create Trigger Capnhat_Thanhtien on CTPNHAP For Insert, Update

As Declare @MaVTu char(4), @SoPn char(4) Select @MaVTu = MaVTu, @SoPn = SoPn

from Inserted

Update CTPNHAP set ThanhTien = SlNhap*DgNhap where (MaVTu = @MaVTu) and (SoPn = @SoPn)

2/8/2018 Microsoft SQL Server 2005 8

Làm việc với Trigger

n Sửa Trigger: sửa Create trong cú pháp tạo mới thành Alter Ví dụ: Sửa Trigger ở ví dụ trước để giá trị cột ThanhTien =

SlNhap*DgNhap*2:

Alter Trigger Capnhat_Thanhtien on CTPNHAP For Insert, Update

As Declare @MaVTu char(4), @SoPn char(4) Select @MaVTu=MaVTu, @SoPn=SoPn from Inserted

Update CTPNHAP

set ThanhTien=SlNhap*DgNhap*2

where (MaVTu=@MaVTu) and (SoPn=@SoPn)

(3)

2/8/2018 Microsoft SQL Server 2005 9

Làm việc với Trigger

nXóa Trigger:

Cú pháp:

Drop Trigger Tên_Trigger Ví dụ:

Drop Trigger

Capnhat_Thanhtien Lưu ý: có thể xóa trigger từ màn hình làm việc của Managament Studio

2/8/2018 Microsoft SQL Server 2005 10

Trigger lồng nhau

n Các Trigger có thể lồng nhau tối đa 32 cấp

n Biến hệ thống lưu cấp độ lồng nhau: @@nestlevel

n Để bật/tắt tạm thời chế độ lồng nhau của Trigger, sử dụng cú pháp:

Exec sp_configure 'nested triggers', 0/1 trong đó: 0 là tắt, 1 là bật

Một số ví dụ về Trigger

nTrigger khi thêm mới dữ liệu:

-Tự động kích hoạt khi có hành động thêm mới dữ liệu vào bảng

-Thường dùng để kiểm tra các ràng buộc về toàn vẹn dữ liệu: khóa ngoại, miền giá trị, liên thuộc tính trong cùng một bảng hoặc nhiều bảng khác nhau

-Các cấu trúc lệnh thường dùng: If else, if exists, raise error, rollback tran

Một số ví dụ về Trigger

nTrigger khi thêm mới dữ liệu (tiếp):

Yêu cầu:

Tạo trigger cho bảng PNHAP để thực hiện việc kiểm tra dữ liệu khi có hành động thêm mới:

- Số đơn đặt hàng phải tồn tại trong bảng DONDH

- Ngày nhập hàng phải sau ngày đặt hàng

(4)

2/8/2018 Microsoft SQL Server 2005 13

Giải ví dụ:

Create Trigger Themmoi_PNHAP on PNHAP for insert

As

Declare @NgayDH datetime, @ErrMsg char(200) If not exists (select * from Inserted, DONDH

where Inserted.SoDH=DONDH.SoDH) Begin

Rollback Tran

Raiserror('So don hang khong ton tai!',16,1) Return

End

Một số ví dụ về Trigger

2/8/2018 Microsoft SQL Server 2005 14

Một số ví dụ về Trigger

Giải ví dụ (tiếp):

Select @NgayDH=NgayDH from Inserted,DONDH where Inserted.SoDH=DONDH.SoDH

If @NgayDH > (select Ngaynhap from Inserted) Begin

Rollback Tran

Set @ErrMsg='Ngay nhap hang phai sau ngay' + convert(char(10),@NgayDH,103) Raiserror(@ErrMsg,16,1)

End

2/8/2018 Microsoft SQL Server 2005 15

Một số ví dụ về Trigger

n Trigger khi hủy bỏ dữ liệu:

- Tự động kích hoạt khi dữ liệu được hủy bỏ

- Thường dùng để kiểm tra ràng buộc toàn vẹn dữ liệu dạng khóa ngoại

Ví dụ: Tạo Trigger kiểm tra việc xóa dữ liệu cho bảng DONDH

- Nếu đã có ít nhất một phiếu nhập hàng cho đơn đặt hàng đó thì thông báo không thể xóa đơn đặt hàng

- Nếu chưa có phiếu nhập nào thì tự động xóa các dữ liệu liên quan bên bảng CTDONDH

2/8/2018 Microsoft SQL Server 2005 16

Một số ví dụ về Trigger

Create Trigger Xoa_DONDH on DONDH for delete As Declare @SoPn char(4), @ErrMsg char(200)

If exists (select SoPn from PNHAP

where SoDH in (select SoDH from Deleted)) Begin

Select @SoPn = min(SoPn) from PNHAP where SoDH in (select Sodh from Deleted)

Set @ErrMsg='Don dat hang da duoc nhap theo phieu nhap' +@SoPn+'. Khong the huy don hang! ' Raiserror(@ErrMsg,16,1)

Rollback Tran End

Else

Delete CTDONH where SoDh in (Select SoDH from Deleted)

(5)

2/8/2018 Microsoft SQL Server 2005 17

Một số ví dụ về Trigger

nTrigger khi sửa dữ liệu: Tự động kích hoạt khi có hành động sửa dữ liệu, cần kiểm tra các ràng buộc về khóa ngoại, miền giá trị. Cần sử dụng hàm Update

nVí dụ:Khi sửa dữ liệu của bảng DONDH, không được sửa các dữ liệu SoDH hoặc MaNCC vì nó liên quan tới nhiều bảng khác

2/8/2018 Microsoft SQL Server 2005 18

Một số ví dụ về Trigger

Create Trigger Sua_DONDH on DONDH for Update

As

Declare @ErrMsg char(200)

If update(SoDH) or update (MaNCC) Begin

Rollback Tran

Set @ErrMsg='Khong duoc sua SoDH/MaNCC' Raiserror(@ErrMsg,16,1)

Return End

Tài liệu tham khảo

Tài liệu liên quan

a) Phương pháp thu thập dữ liệu: Thực hiện khảo sát 15 bạn bất kỳ trong lớp bằng bảng hỏi về mức độ thường xuyên tập thể dục buổi sáng của các bạn. Khi đó dữ liệu thu

Câu 2 trang 47 Tin học lớp 7: Các lệnh trình bày bảng tính hay định dạng dữ liệu có làm thay đổi dữ liệu trên bảng tính không..

Với các kết quả của nhiều nghiên cứu (EPIC, GPO-L-ONE, tác giả Cohen) đã cho thấy rằng sự thay đổi các chỉ số ferritin và LIC phụ thuộc vào rất nhiều yếu tố như:

** ThS, Trường Đại học Đồng Tháp.. Vì vậy, việc nghiên cứu nhằm đưa ra các giải pháp cho phép chuyển đổi dữ liệu từ các cơ sở dữ liệu quan hệ của Web hiện tại sang mô

Một báo cáo nghiên cứu hồi cứu của hiệp hội đăng ký ghép tuỷ và máu quốc tế (International Blood and Marrow Transplant Registry: IBMTR) cho thấy kết quả về

Khoảng 95% các trường hợp là do thiếu hụt 21-hydroxylase (21-OH) dẫn đến thiếu cortisol kèm theo (hoặc không) thiếu hụt aldosterone và tăng tiết androgen thượng

Ta có thể sử dụng các lệnh trong phác thảo 3D (3D Sketch) để tạo biên dạng quét hoặc sử dụng cạnh của mô hình có sẵn làm đường dẫn.. Lệnh

Câu 23: Trường hợp hai cặp gen không alen nằm trên hai cặp nhiễm sắc thể tương đồng cùng tác động đến sự hình thành một tính trạng được gọi là hiện