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ếtBà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=1 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=0 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