1. Trang chủ
  2. » Công Nghệ Thông Tin

Trigger(Hướng dẫn thực hành)

9 7,1K 99
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 2,24 MB

Nội dung

Trigger(Hướng dẫn thực hành)

Trang 1

Chương 16 Trigger(Hướng dẫn thực hành)

Mục tiêu bài học:

Kết thúc bài này bạn có thể –

 Tạo bẫy lỗi INSERT, DELETE, UPDATE, và INSTEAD OF

 Mã hóa một đoạn mã bẫy lỗi

 Liệt kê các bẫy lỗi được gắn với một bảng

 Xem thông tin về các bẫy lỗi

Các bước đưa ra trong chương này là chi tiết , dễ hiểu và được xem xét kỹ Nó được tạo ra với mục đích giúp người đọc có thể học và hiểu công cụ một cách đầy đủ Hãy làm theo các bước sau một cách cẩn thận

Phần I : Hướng dẫn Thời gian : 1 giờ 30 phút

16.1 Bẫy lỗi

Một bẫy lỗi là một thủ tục lưu đặc biệt, nó được tự động gọi đến bất cứ khi nào dữ liệu trong bảng bị sửa đổi.Nói cách khác ,bất cứ khi nào các lệnh INSERT, DELETE, hay UPDATE được sử dụng trên một đối tượng,thì bẫy lỗi tương ứng với câu lệnh đó sẽ được thực thi

Trong chương này, chúng ta sẽ tạo một vài kiểu bẫy lỗi khác nhau, và xem thông tin về các bẫy lỗi

16.1.1 Tạo bẫy lỗi INSERT

Bẫy lỗi INSERT kiểm tra tính hợp lệ của dữ liệu được nhập vào một bảng Chúng ta hãy

tạo bẫy lỗi INSERT trong bảng Territories của cơ sở dữ liệu Northwind.Bẫy lỗi này để

kiểm tra chắc chắn rằng các mô tả về territory được nhập vào là không rỗng Các bước thực tạo bẫy lỗi đó hiện trong Query Analyzer như sau:

1 Chọn cơ sở dữ liệu Northwind.

2 Thực thi khối lệnh T-SQL sau:

CREATE TRIGGER InsertTerritories

ON Territories

FOR INSERT

AS

IF((SELECT TerritoryDescription FROM INSERTED) = '') BEGIN

PRINT 'The territory description must be entered' ROLLBACK TRANSACTION

END

Bây giờ hãy cố gắng chèn thêm một bản ghi vào bảng Territories,với phần miêu tả là

một chuỗi rỗng

Trang 2

3 Thực thi câu lệnh sau:

INSERT INTO Territories

VALUES (1620, '', 1) Kết quả được hiển thị trong hình 16.1

Hình 16.1: Kiểm tra bẫy lỗi INSERT 16.1.2 Tạo bẫy lỗi DELETE

Bẫy lỗi DELETE ngăn không cho xóa các dữ liệu quan trọng từ một bảng.Chúng ta có thể sử dụng chúng để hạn chế số lượng dữ liệu được xóa từ một bảng tại cùng một thời điểm.Hãy tạo một bẫy lỗi DELETE,bẫy lỗi này không cho phép xóa nhiều hơn 2 bản ghi

trong cùng một thời gian,từ bảng EmployeeTerritories của cơ sở dữ liệu Northwind.

Các bước thực hiện việc tạo bẫy lỗi đó trong Query Analyzer như sau:

1 Thực thi khối lệnh T-SQL sau:

CREATE TRIGGER DeleteEmployeeTerritories

ON EmployeeTerritories

FOR DELETE

AS

IF (SELECT COUNT (*) FROM DELETED) > 2 BEGIN

PRINT 'You cannot delete more than 2 records' ROLLBACK TRANSACTION

END Bây giờ các bẫy lỗi đã được tạo ra, chúng ta hãy thử xóa nhiều hơn 2 bản ghi từ bảng

EmployeeTerritories.

2 Thực thi câu lệnh sau:

Trang 3

Bảng EmployeeTerritories có hơn 2 bản ghi, thỏa mãn điều kiện được đặt ra Kết quả

của câu lệnh được hiển thị trong hình 16.2

Hình 16.2: Sử dụng bẫy lỗi DELETE 16.1.3 Tạo bẫy lỗi Table-Level UPDATE

Một bẫy lỗi table level UPDATE được thực thi khi bất kì một trường nào trong bảng được cập nhật

Chúng ta tạo một bẫy lỗi UPDATE để chắc chắn rằng có tồn tại trường UnitsOnOrder

và trường ReorderLevel trong bảng Products, và 2 trường đó sẽ không có giá trị thay

đổi nào nhỏ hơn 10 Bẫy lỗi có thể thực thi mỗi khi thao tác cập nhật được thực hiện trên

bất kì một cột/ trường nào trong bảng Products Các bước thực hiện trong Query

Analyzer như sau:

1 Thực thi khối lệnh T-SQL:

CREATE TRIGGER CheckProductUpdate

ON Products

FOR UPDATE AS

IF ((SELECT UnitsOnOrder FROM INSERTED) < 10)

OR ((SELECT ReorderLevel FROM INSERTED) < 10) BEGIN

PRINT 'Error!' ROLLBACK TRANSACTION END

Bây giờ chúng ta hãy thực hiện việc cập nhật trên cột UnitsOnOrder.

2 Thực thi câu lệnh sau:

UPDATE Products

SET UnitsOnOrder = 5 WHERE ProductID = 5 Kết quả được hiển thị trong hình 16.3

Trang 4

Hình 16.3: Sử dụng bẫy lỗi Table-level UPDATE 16.1.4 Tạo một bẫy lỗi Column-Level UPDATE

Bẫy lỗi column level UPDATE được thực thi khi dữ liệu trong các cột đặc biệt được cập nhật

Chúng ta hãy tạo một bẫy lỗi,bẫy lỗi này không cho phép bất kì thay đổi nào tới giá trị

của cột UnitPrice trong bảng Order details Các bước để tạo bẫy lỗi đó trong Query

Analyzer như sau:

1 Thực thi khối lệnh T-SQL sau:

CREATE TRIGGER OrderDetailsUpdate

ON [Order Details]

FOR UPDATE

AS

IF UPDATE(UnitPrice) BEGIN

PRINT ‘You cannot update the unit price field’

ROLLBACK TRANSACTION END

Bây giờ bẫy lỗi OrderDetailsUpdate đã được tạo, chúng ta hãy thử thực hiện thao tác cập nhật trên cột UnitPrice.

2 Thực thi câu lệnh:

UPDATE [Order Details]

SET UnitPrice = 15 WHERE OrderID = 10248 AND ProductID = 42 Kết quả thực thi được hiện thị trên hình 16.4

Trang 5

Hình 16.4: Sử dụng bẫy lỗi Column-level UPDATE 16.1.5 Tạo một bẫy lỗi với tùy chọn WITH Encryption.

Sự mã hóa là một phương pháp lưu giữ các thông tin mật Sự mã hóa tạo ra các thông tin không đọc được Mã hóa bẫy lỗi để chắc chắn rằng các đoạn mã bẫy lỗi là ẩn đối với người sử dụng

Chúng ta hãy sử dụng lệnh ALTER TRIGGER của T-SQL để sửa đổi bẫy lỗi INSERT

có tên là InsertTerritories ,đã được chúng ta tạo từ ban đầu Các bước để mã hóa bẫy lỗi

đó trong Query Analyzer như sau:

1 Thực thi khối lệnh T-SQL sau:

ALTER TRIGGER InsertTerritories

ON Territories WITH ENCRYPTION

FOR INSERT

AS

IF((SELECT TerritoryDescription FROM INSERTED) = '') BEGIN

PRINT 'The territory description must be entered' ROLLBACK TRANSACTION

END

Bây giờ, Chúng ta hãy thử xem mã của bẫy lỗi đó, có thể sử dụng thủ tục lưu hệ thống

sp_helptext để xem mã của bẫy lỗi.

2 Thực thi câu lệnh sau:

sp_helptext InsertTerritories

Kết quả được hiển thị trong hình 16.5

Trang 6

Hình 16.5: Khai báo mã hóa bẫy lỗi 16.1.6 Hiển thị danh sách các bẫy lỗi

Sử dụng thủ tục lưu hệ thống sp_helptrigger để hiển thị danh sách các bẫy lỗi trong cơ

sở dữ liệu hiện hành Nó có thể được sử dụng để xem mã các bẫy lỗi liên quan đến một

bảng Chúng ta hãy liệt kê các bẫy lỗi gắn với bảng Products Các bước để thực hiện

trong Query Analyzer như sau:

1 Thực thi câu lệnh sau:

sp_helptrigger Products

Danh sách các bẫy lỗi được hiển thị trong hình 16.6

Hình 16.6: Xem mã các bẫy lỗi của bảng.

16.1.7 Hiển thị chi tiết bẫy lỗi

SQL Server cho phép bạn xem chi tiết của một bẫy lỗi giống như kiểu bẫy lỗi trên một bảng,như tên của bẫy lỗi, tên người tạo ra và ngày tạo ra bẫy lỗi

Chúng ta có thể làm như sau:

Trang 7

 Hãy liệt kê các đối tượng, các đối tượng này được bẫy lỗi sử dụng trên lý thuyết.Chúng ta có thể sử dụng thông tin này để nhận biết đối tượng nào đã tác động đến bẫy lỗi, khi các đối tượng này bị thay đổi hoặc xóa trong cơ sở dữ liệu

Chúng ta hãy xem đoạn mã bẫy lỗi của khai báo bẫy lỗi trong bảng Territories, sử dụng

công cụ Enterprise Manager Các bước thực hiện như sau:

1 Chọn cơ sở dữ liệu Northwind

2 Nhấn đúp chuột vào đối tượng Tables.

Một danh sách các bảng trong cơ sở dữ liệu Northwind được hiển thị

3 Nhấn chuột phải vào bảng Territories

4 Chọn All Tasks | Manage Triggers từ pop-up menu.

Hộp thoại Trigger Properties được hiển thị.

5 Nhấn chuột vào bẫy lỗi Name trên danh sách drop-down.

Một danh sách các bẫy lỗi được tạo trong bảng Territories được hiển thị.

6 Chọn bất kì một bẫy lỗi nào trong danh sách.

Mã của bẫy lỗi đó được hiển thị

7 Chọn nút bấm Close

16.1.8 Sử dụng bẫy lỗi INSTEAD OF.

Khi bạn gắn bẫy lỗi INSTEAD OF vào một bảng, nó sẽ bỏ qua các thao tác mặc định của câu lệnh bị bẫy lỗi(INSERT, UPDATE, hoặc DELETE) Điều đó có nghĩa là đoạn mã của bẫy lỗi INSTEAD OF được thực thi thay vì thực thi các câu lệnh bẫy lỗi

Chúng ta hãy tạo một bẫy lỗi INSTEAD OF của bảng EmployeeTerritories Các bước

thực hiện trong công cụ Query Analyzer như sau:

1 Thực hiện khối lệnh T-SQL sau:

CREATE TRIGGER InsertEmpTerriInstead

ON EmployeeTerritories

INSTEAD OF INSERT

AS

BEGIN SELECT EmployeeID, TerritoryID FROM INSERTED SELECT EmployeeID, TerritoryID FROM DELETED SELECT * FROM EmployeeTerritories WHERE EmployeeID = (SELECT EmployeeID FROM INSERTED)

Trang 8

Bây giờ chúng ta hãy chèn thêm các giá trị vào bảng EmployeeTerritories

2 Thực thi câu lệnh sau:

INSERT INTO EmployeeTerritories

VALUES (1, 40222) Kết quả được hiển thị trong hình 16.9

Hình 16.9: Sử dụng bẫy lỗi INSTEAD OF

Nội dung của bảng EmployeeTerritories được giữ nguyên không thay đổi, thậm chí sau

khi thực hiện thao tác chèn Thay vì thực hiện thao tác chèn,các câu lệnh của bẫy lỗi INSTEAD OF sẽ được thực thi

Thực hiện các thao tác sau trong Query Analyzer sử dụng cơ sở dữ liệu pubs:

1 Tạo một bẫy lỗi INSERT có tên là InsertSales trong bảng Sales Bẫy lỗi này để chắc chắn

rằng ngày tháng đặt hàng được nhập vào không nhỏ hơn ngày tháng hiện tại,và số lượng đặt

hàng không nhỏ hơn 10 Sử dụng lệnh CREATE TRIGGER…FOR INSERT để tạo bẫy lỗi và

sử dụng bảng logic INSERTED để kiểm tra các giá trị

2 Tạo một bẫy lỗi UPDATE có tên là UpdateTitleAdvance trong bảng titles Cột advance

không thể cập nhật các giá trị trên 15000 Sử dụng lệnh CREATE TRIGGER…FOR

Trang 9

3 Hiển thị mã của bẫy lỗi InsertSales được tạo trong bảng sales Sử dụng thủ tục lưu hệ thống

sp_helptext

4 Sửa đổi bẫy lỗi UpdateTitleAdvance được tạo trong bảng titles.Hãy chắc chắn rằng mã bẫy

lỗi là ẩn đối với người sử dụng Sử dụng câu lệnh ALTER TRIGGER và tùy chọn WITH ENCRYPTION

Phần III – Bài tập về nhà

Thực hiện các thao tác sau trong công cụ Query Analyzer sử dụng cơ sở dữ liệu Northwind:

1 Tạo một khung nhìn có tên là RevOrderDetails chứa chi tiết các trường như order ID, customer ID, product ID, và quantity từ bảng Orders và bảng Order Details Tạo một bẫy lỗi DELETE có tên là DeleteOrder, bẫy lỗi này xóa dư liệu từ một khung nhìn Để kiểm tra bẫy lỗi , xóa chi tiết của order ID 10250 khỏi khung nhìn.

Ngày đăng: 11/09/2012, 14:32

HÌNH ẢNH LIÊN QUAN

 Liệt kê các bẫy lỗi được gắn với một bảng. - Trigger(Hướng dẫn thực hành)
i ệt kê các bẫy lỗi được gắn với một bảng (Trang 1)
Bây giờ hãy cố gắng chèn thêm một bản ghi vào bảng Territories,với phần miêu tả là một chuỗi rỗng. - Trigger(Hướng dẫn thực hành)
y giờ hãy cố gắng chèn thêm một bản ghi vào bảng Territories,với phần miêu tả là một chuỗi rỗng (Trang 2)
Kết quả được hiển thị trong hình 16.1. - Trigger(Hướng dẫn thực hành)
t quả được hiển thị trong hình 16.1 (Trang 2)
Hình 16.1: Kiểm tra bẫy lỗi INSERT  16.1.2 Tạo bẫy lỗi DELETE - Trigger(Hướng dẫn thực hành)
Hình 16.1 Kiểm tra bẫy lỗi INSERT 16.1.2 Tạo bẫy lỗi DELETE (Trang 2)
Bảng EmployeeTerritories có hơn 2 bản ghi, thỏa mãn điều kiện được đặt ra. Kết quả - Trigger(Hướng dẫn thực hành)
ng EmployeeTerritories có hơn 2 bản ghi, thỏa mãn điều kiện được đặt ra. Kết quả (Trang 3)
của câu lệnh được hiển thị trong hình 16.2. - Trigger(Hướng dẫn thực hành)
c ủa câu lệnh được hiển thị trong hình 16.2 (Trang 3)
Bảng  EmployeeTerritories có hơn 2 bản ghi, thỏa mãn điều kiện được đặt ra. Kết quả - Trigger(Hướng dẫn thực hành)
ng EmployeeTerritories có hơn 2 bản ghi, thỏa mãn điều kiện được đặt ra. Kết quả (Trang 3)
Hình 16.2: Sử dụng bẫy lỗi DELETE  16.1.3 Tạo bẫy lỗi Table-Level UPDATE - Trigger(Hướng dẫn thực hành)
Hình 16.2 Sử dụng bẫy lỗi DELETE 16.1.3 Tạo bẫy lỗi Table-Level UPDATE (Trang 3)
Kết quả được hiển thị trong hình 16.3. - Trigger(Hướng dẫn thực hành)
t quả được hiển thị trong hình 16.3 (Trang 4)
Hình 16.3: Sử dụng bẫy lỗi Table-level UPDAT E. 16.1.4 Tạo một bẫy lỗi Column-Level UPDATE - Trigger(Hướng dẫn thực hành)
Hình 16.3 Sử dụng bẫy lỗi Table-level UPDAT E. 16.1.4 Tạo một bẫy lỗi Column-Level UPDATE (Trang 4)
Hình 16.3: Sử dụng bẫy lỗi Table-level UPDATE . 16.1.4 Tạo một bẫy lỗi Column-Level UPDATE - Trigger(Hướng dẫn thực hành)
Hình 16.3 Sử dụng bẫy lỗi Table-level UPDATE . 16.1.4 Tạo một bẫy lỗi Column-Level UPDATE (Trang 4)
Hình 16.4: Sử dụng bẫy lỗi Column-level UPDATE 16.1.5 Tạo một bẫy lỗi với tùy chọn WITH Encryption. - Trigger(Hướng dẫn thực hành)
Hình 16.4 Sử dụng bẫy lỗi Column-level UPDATE 16.1.5 Tạo một bẫy lỗi với tùy chọn WITH Encryption (Trang 5)
Kết quả được hiển thị trong hình 16.5. - Trigger(Hướng dẫn thực hành)
t quả được hiển thị trong hình 16.5 (Trang 5)
Hình 16.4: Sử dụng bẫy lỗi Column-level UPDATE  16.1.5 Tạo một bẫy lỗi với tùy chọn WITH Encryption. - Trigger(Hướng dẫn thực hành)
Hình 16.4 Sử dụng bẫy lỗi Column-level UPDATE 16.1.5 Tạo một bẫy lỗi với tùy chọn WITH Encryption (Trang 5)
Hình 16.5: Khai báo mã hóa bẫy lỗi 16.1.6 Hiển thị danh sách các bẫy lỗi - Trigger(Hướng dẫn thực hành)
Hình 16.5 Khai báo mã hóa bẫy lỗi 16.1.6 Hiển thị danh sách các bẫy lỗi (Trang 6)
Danh sách các bẫy lỗi được hiển thị trong hình 16.6. - Trigger(Hướng dẫn thực hành)
anh sách các bẫy lỗi được hiển thị trong hình 16.6 (Trang 6)
Hình 16.5:  Khai báo mã hóa bẫy lỗi  16.1.6 Hiển thị danh sách các bẫy lỗi - Trigger(Hướng dẫn thực hành)
Hình 16.5 Khai báo mã hóa bẫy lỗi 16.1.6 Hiển thị danh sách các bẫy lỗi (Trang 6)
Hình 16.6: Xem mã các bẫy lỗi của bảng. - Trigger(Hướng dẫn thực hành)
Hình 16.6 Xem mã các bẫy lỗi của bảng (Trang 6)
Chúng ta hãy xem đoạn mã bẫy lỗi của khai báo bẫy lỗi trong bảng Territories, sử dụng công cụ Enterprise Manager - Trigger(Hướng dẫn thực hành)
h úng ta hãy xem đoạn mã bẫy lỗi của khai báo bẫy lỗi trong bảng Territories, sử dụng công cụ Enterprise Manager (Trang 7)
Bây giờ chúng ta hãy chèn thêm các giá trị vào bảng EmployeeTerritories. - Trigger(Hướng dẫn thực hành)
y giờ chúng ta hãy chèn thêm các giá trị vào bảng EmployeeTerritories (Trang 8)
Hình 16.9: Sử dụng bẫy lỗi INSTEAD OF - Trigger(Hướng dẫn thực hành)
Hình 16.9 Sử dụng bẫy lỗi INSTEAD OF (Trang 8)

TỪ KHÓA LIÊN QUAN

w