Xây dựng cơ sở dữ liệu cho một website phần 2

Loại: Viết Trigger

Các bài cần theo dõi của bài viết: Xây dựng cơ sở dữ liệu cho một website

Phần 1: Tạo database

Phần 2: Viết Trigger

Phần 3: Viết store procedure truy vấn, thêm, sửa, xóa một chuyên mục

Phần 4: Viết store procedure hiển thị menu đa cấp

Phần 5: Viết store Procedure thêm, sửa, xóa một bài viết

Phần 6: Viết store procedure hiển thị danh sách bài viết

Phần 7: Viết store procedure tìm kiếm bài viết

Phần 8: Viết store procedure top 10 các bài viết mới và cũ

Viết các TRIGGER: Tiếp theo mình sẽ giới thiệu các TRIGGER để sinh và cập nhật tự động cho bảng TB_Category (Độ sâu vầ phân cấp của chuyên mục) và bảng TB_News

1. Trigger For TB_Category

Với bảng TB_Category để thể hiện các chuyên mục của website và cũng để thể hiện menu đa cấp nên chúng ta cần viết các Trigger để tự động cập nhật độ sâu và phân cấp cho menu. Như vậy mính sẽ phải viết 2 Trigger For Update và For Insert

a. Trigger For Insert

-- Create by webmaster@hmweb.com.vn

CREATE TRIGGER [dbo].[TB_Category_InsertTrigger]

ON [dbo].[TB_Category]

FOR INSERT AS
-- Tính và cập nhật lại Độ sâu và phân cấp của chuyên mục (For Inserted)

UPDATE child

      SET Decen = ISNULL(parent.Decen + 1,0),

      Depth = ISNULL(parent.Depth,'/') + LTrim(Str(child.CateID)) + '/'

 FROM TB_Category child INNER JOIN inserted i ON i.CateID=child.CateID

 LEFT OUTER JOIN TB_Category parent ON child.ParentID=parent.CateID

 b. Trigger For Update

-- Create by webmaster@hmweb.com.vn

CREATE TRIGGER [dbo].[TB_Category_UpdateTrigger]

ON [dbo].[TB_Category]

FOR UPDATE AS



IF UPDATE (ParentID)

-- Thực hiện cập nhật độ sâu và Phân cấp của thư mục

UPDATE child



      SET Decen = child.Decen - old.Decen + ISNULL(parent.Decen + 1,0),

      Depth = ISNULL(parent.Depth,'/') + LTrim(Str(old.CateID)) + '/' +

                    right(child.Depth, len(child.Depth) - len(old.Depth))



FROM TB_Category child

INNER JOIN inserted old ON child.Depth LIKE old.Depth + '%'

LEFT OUTER JOIN TB_Category parent ON old.ParentID=parent.CateID