Trong thủ tục này mình viết tìm kiếm bài viết đơn giản theo trạng thái (Status), Theo Chuyên mục (CateID) và theo từ khóa (Keyword). Ngoài ra bạn muốn tìm theo các trường khác như Thời gian viết, Thời gian đăng, ... bạn có thể bổ xung vào thủ tục
+ Trạng Thái
- Nếu @Status=1 => Các bài đã đăng
- Nếu @Status=-1 => Các bài chờ đăng
- Nếu @Status=0 => Không Set
+ Chuyên mục
- Nếu @CateID>0 => Tìm theo điều kiện CateID
+ Từ khóa
Ở đây mình tìm kiếm theo điều kiện LIKE ở trường Title và trường Description (Nếu bạn cần tìm theo các trường khác thì bạn có thể thay đồi)
Thủ tục tìm kiếm minh họa như sau
-- =============================================-- Author: webmaster@hmweb.com.vn
-- Description: <Tìm kiếm bài viết theo điều kiện>
-- =============================================
CREATE PROCEDURE spTB_News_Search
@Status int,
@CateID int,
@Keyword nvarchar(255)
AS
BEGIN
-- Khai báo chuỗi truy vấn
DECLARE @SQL nvarchar(4000)
SET @SQL =''
SET @SQL =@SQL+ N'
SELECT
TB_Category.CateID,
TB_Category.CateName,
TB_News.idNews,
TB_News.UserName,
TB_News.Title,
TB_News.Description,
TB_News.Content,
TB_News.Author,
TB_News.Picture,
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
FROM TB_Category INNER JOIN
TB_News ON TB_Category.CateID = TB_News.CateID WHERE ''1''=''1'''
--Khai báo điều kiện tìm kiếm
DECLARE @SQLWhere nvarchar(4000)
SET @SQLWhere=''
-- Nếu @Status=1 thì tìm điều kiện Status=1 (Đã đăng)
IF @Status=1
SET @SQLWhere=@SQLWhere+ N' AND TB_News.Status =1 '
-- Nếu @Status=-1 thì tìm điều kiện Status=0 (Chờ đăng)
IF @Status=-1
SET @SQLWhere =@SQLWhere+ ' AND TB_News.Status =0 '
-- Tìm kiếm theo chuyên mục nếu @CateID>0
IF @CateID>0
SET @SQLWhere =@SQLWhere+ ' AND TB_News.CateID = '+cast(@CateIDAS char(20)) +''
-- Tìm kiếm theo từ khóa
IF @Keyword<>''
SET @SQLWhere =@SQLWhere+ '
AND ( TB_News.Title LIKE ''%'+@Keyword+ '%''
OR TB_News.Description LIKE ''%'+@Keyword+ '%'')'
-- Khai báo Chuỗi thực thi tìm kiếm
DECLARE @SQLEXEC nvarchar(4000)
-- Kết hợp điều kiện tìm kiếm vào chuỗi truy vấn
SET @SQLEXEC=@SQL+@SQLWhere
-- Thực thi điều kiện tìm kiếm và trả về dữ liệu nếu có
EXEC sp_executesql @SQLEXEC
--PRINT @SQLEXEC
END