Cấp bậc tác giả:

DATABASE

Hướng dẫn xây dựng website: Viết store procedure phần 4

Được viết bởi QuangIT ngày 13/08/2012 lúc 07:30 PM
Bài này sẽ tiếp tục các hàm và thủ tục cho bảng TB_News
  • 0
  • 9352

Hướng dẫn xây dựng website: Viết store procedure phần 4

Bài này sẽ tiếp tục các hàm và thủ tục cho bảng TB_News
1. Trigger để cập nhật tự động trường Link cho bài viết
Để tự động cập nhật trường liên kết cho bài viết bạn có thể thực hiện như Trigger sau

-- Create by webmaster@hmweb.com.vn

CREATE TRIGGER [dbo].[TB_News_InsertTrigger]
ON [dbo].TB_News 
FOR INSERT AS

DECLARE   @Link nvarchar(100)
DECLARE @NewID int
DECLARE  @CateID int
SELECT  @CateID = (SELECT  CateID FROM  Inserted)
SELECT  @Link=Link FROM TB_Category  WHERE CateID =@CateID
SELECT @NewID=(Select idNews from Inserted)
SET @Link=@Link+'&NewsID='+Cast(@NewID AS nvarchar(20))
--Cập nhật trường liên kết cho bài viết
UPDATE  TB_News SET  Link=@Link
      WHERE idNews=(Select idNews from Inserted)
 2.  Store procedure Truy vấn danh sách bài viết
Bài viết có thể ở 1 trong 2 trạng thái đã đăng hoặc chưa đăng (Ở đây mình phân tích chỉ 2 trạng thái, nếu ứng dụng của bạn có yêu cầu phân quyền nhiều cấp như trạng thái chờ đăng, trạng thái chờ duyệt, trạng thái đăng ... thì bạn sửa lại cho phù hợp). Trong store procedure sau tùy theo @Action đề lấy bài viết theo trạng thái tương ứng:
- Nếu @Action=0 thì truy vấn tất cả - cả đã đăng và chờ đăng
- Nếu @Action=1 thì truy vấn các bài đã đăng
- Nếu @Action=-1 thì truy vẫn các bài chờ đăng.
Khi sử dụng store này tùy vào yêu cầu mà bạn Set giá trị của @Action
-- =============================================
-- Author:        webmaster@hmweb.com.vn
-- Description:   <Truy vấn bài viết>
-- =============================================
CREATE PROCEDURE [dbo].[spRB_News_Select]
@Action int,
@idNews int
AS
BEGIN
      -- Nếu @Action=1 => truy vấn bài viết có trạng thái đã đăng
      IF @Action=1
      BEGIN
            -- Nếu @idNews=0 => truy vấn hết các bài đã đăng
            IF @Action=0
            BEGIN
                  SELECT    
                  TB_Category.CateID,
                  TB_Category.ParentID,
                  TB_Category.CateName,
                  TB_News.idNews,
                  TB_News.UserName,
                  TB_News.Title,
                  TB_News.Description,
                  TB_News.Content,
                  TB_News.Author,
                  TB_News.Picture,
                  -- Chuyển thời gian thành dd/MM/yyyy
                  CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
                  CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
                  CASE TB_News.Status
                        WHEN 1 THEN N'Đã đăng'
                        WHEN 0 THEN N'Chưa đăng' END AS Status, 
                  TB_News.Numberreads,
                  TB_News.Link,
                  TB_Category.Decen,
                  TB_Category.Depth
                  FROM  TB_Category INNER JOIN
                  TB_News ON TB_Category.CateID = TB_News.CateID
                  WHERE TB_News.Status=1
            END
            ELSE
            --Nếu @idNew>0 => Truy vấn bài viết đã đăng theo idNews
            BEGIN
                  -- Cập nhật số lần xem bài viết
                  DECLARE @Numberreads int
                  SET @Numberreads=0
                  SELECT @Numberreads=Numberreads FROM TB_News WHEREidNews=@idNews
                  UPDATE TB_News
                  SET
                        Numberreads =@Numberreads +1
                  WHERE idNews=@idNews
                  -- Nếu cập nhật thành công => Select
                  IF @@ERROR=0     
                  SELECT    
                  TB_Category.CateID,
                  TB_Category.ParentID,
                  TB_Category.CateName,
                  TB_News.idNews,
                  TB_News.UserName,
                  TB_News.Title,
                  TB_News.Description,
                  TB_News.Content,
                  TB_News.Author,
                  TB_News.Picture,
                  -- Chuyển thời gian thành dd/MM/yyyy
                  CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
                  CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
                  CASE TB_News.Status
                        WHEN 1 THEN N'Đã đăng'
                        WHEN 0 THEN N'Chưa đăng' END AS Status, 
                  TB_News.Numberreads,
                  TB_News.Link,
                  TB_Category.Decen,
                  TB_Category.Depth
                  FROM  TB_Category INNER JOIN
                  TB_News ON TB_Category.CateID = TB_News.CateID
                  WHERE TB_News.Status=AND TB_News.idNews=@idNews
            END
      END
     
      -- Nếu @Action=-1 => truy vấn bài viết có trạng thái chưa đăng
      IF @Action=-1
      BEGIN
            -- Nếu @idNews=0 => truy vấn hết các bài chưa đăng
            IF @Action=0
            BEGIN
                  SELECT    
                  TB_Category.CateID,
                  TB_Category.ParentID,
                  TB_Category.CateName,
                  TB_News.idNews,
                  TB_News.UserName,
                  TB_News.Title,
                  TB_News.Description,
                  TB_News.Content,
                  TB_News.Author,
                  TB_News.Picture,
                  -- Chuyển thời gian thành dd/MM/yyyy
                  CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
                  CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
                  CASE TB_News.Status
                        WHEN 1 THEN N'Đã đăng'
                        WHEN 0 THEN N'Chưa đăng' END AS Status, 
                  TB_News.Numberreads,
                  TB_News.Link,
                  TB_Category.Decen,
                  TB_Category.Depth
                  FROM  TB_Category INNER JOIN
                  TB_News ON TB_Category.CateID = TB_News.CateID
                  WHERE TB_News.Status=0
            END
            ELSE
            --Nếu @idNew>0 => Truy vấn bài viết chưa đăng theo idNews
            BEGIN
                  SELECT    
                  TB_Category.CateID,
                  TB_Category.ParentID,
                  TB_Category.CateName,
                  TB_News.idNews,
                  TB_News.UserName,
                  TB_News.Title,
                  TB_News.Description,
                  TB_News.Content,
                  TB_News.Author,
                  TB_News.Picture,
                  -- Chuyển thời gian thành dd/MM/yyyy
                  CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
                  CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
                  CASE TB_News.Status
                        WHEN 1 THEN N'Đã đăng'
                        WHEN 0 THEN N'Chưa đăng' END AS Status, 
                  TB_News.Numberreads,
                  TB_News.Link,
                  TB_Category.Decen,
                  TB_Category.Depth
                  FROM  TB_Category INNER JOIN
                  TB_News ON TB_Category.CateID = TB_News.CateID
                  WHERE TB_News.Status=AND TB_News.idNews=@idNews
            END
      END
     
      -- Nếu @Action=0 => truy vấn All (Cả trạng thái đã đăng và chưa đăng)
      IF @Action=0
      BEGIN
            -- Nếu @idNews=0 => truy vấn hết các bài chưa đăng
            IF @Action=0
            BEGIN
                  SELECT    
                  TB_Category.CateID,
                  TB_Category.ParentID,
                  TB_Category.CateName,
                  TB_News.idNews,
                  TB_News.UserName,
                  TB_News.Title,
                  TB_News.Description,
                  TB_News.Content,
                  TB_News.Author,
                  TB_News.Picture,
                  -- Chuyển thời gian thành dd/MM/yyyy
                  CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
                  CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
                  CASE TB_News.Status
                        WHEN 1 THEN N'Đã đăng'
                        WHEN 0 THEN N'Chưa đăng' END AS Status, 
                  TB_News.Numberreads,
                  TB_News.Link,
                  TB_Category.Decen,
                  TB_Category.Depth
                  FROM  TB_Category INNER JOIN
                  TB_News ON TB_Category.CateID = TB_News.CateID
                   
            END
            ELSE
            --Nếu @idNew>0 => Truy vấn bài viết chưa đăng theo idNews
            BEGIN
                  SELECT    
                  TB_Category.CateID,
                  TB_Category.ParentID,
                  TB_Category.CateName,
                  TB_News.idNews,
                  TB_News.UserName,
                  TB_News.Title,
                  TB_News.Description,
                  TB_News.Content,
                  TB_News.Author,
                  TB_News.Picture,
                  -- Chuyển thời gian thành dd/MM/yyyy
                  CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,
                  CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,
                  CASE TB_News.Status
                        WHEN 1 THEN N'Đã đăng'
                        WHEN 0 THEN N'Chưa đăng' END AS Status, 
                  TB_News.Numberreads,
                  TB_News.Link,
                  TB_Category.Decen,
                  TB_Category.Depth
                  FROM  TB_Category INNER JOIN
                  TB_News ON TB_Category.CateID = TB_News.CateID
                  WHERE  TB_News.idNews=@idNews
            END
      END
END
Tiếp theo chúng ta cần viết thủ tục tìm kiếm bài viết => Xem tại đây

Nguồn bài viết: hmweb

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML