Root

Welcome to Root.niceboards.org
Chào mừng bạn đến với 4rum học tập, chia sẻ kinh nghiệm và Tài liệu, Ebook miễn phí
Nếu đã có tài khoản vui lòng đăng nhập hoặc chỉ mất 30s để Đăng ký
Thanks!
Root

Hôm qua là quá khứ - Ngày mai là bí ẩn - Hôm nay là một món quà


You are not connected. Please login or register

Viết Stored PROCEDURE phần 6

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

1 Viết Stored PROCEDURE phần 6 on Tue Sep 28, 2010 2:05 am

Admin


Admin
- Hàm trả về 10 bài viết mới hơn cùng chuyên mục, gần nhất với bài viết được chọn
-- =============================================
-- Author: [You must be registered and logged in to see this link.]

-- Description: <Hàm trà về 10 bài viết mới hơn, cùng chuyên mục, gần nhất với bài viết được chọn>

-- =============================================

CREATE FUNCTION [dbo].[fuNewOfNews]

(

@idNews int,

@CateID int

)RETURNS @TB_News_New TABLE

(

idNews int,

Title nvarchar(2000)

)

AS

BEGIN

INSERT INTO @TB_News_New

SELECT TOP 10 TB_News.idNews,

'<A href='+ dbo.ufDomainName()+TB_News.Link +' >'+TB_News.Title+'</a>' as Title

FROM TB_News INNER JOIN

TB_Category ON TB_News.CateID = TB_Category.CateID

WHERE TB_News.idNews>@idNews AND TB_News.CateID=@CateID AND TB_News.Status=1

ORDER BY TB_News.idNews DESC

RETURN

END

- Hàm trả về 10 bài viết cũ hơn cùng chuyên mục, gần nhất với bài viết được chọn

-- =============================================

-- Author: [You must be registered and logged in to see this link.]

-- Description: <Hàm trà về 10 bài viết cũ hơn, cùng chuyên mục, gần nhất với bài viết được chọn>

-- =============================================



CREATE FUNCTION [dbo].[fuOldOfNews]

(

@idNews int,

@CateID int

)

RETURNS @News_Old TABLE

(

idNews int,

Title nvarchar(2000)

)

AS

BEGIN

INSERT INTO @News_Old

SELECT TOP 10 TB_News.idNews,

'<A href='+ dbo.ufDomainName()+TB_News.Link +' >'+TB_News.Title+'</a>' as Title

FROM TB_News INNER JOIN

TB_Category ON TB_News.CateID = TB_Category.CateID

WHERE TB_News.idNews<@idNews

AND TB_News.CateID=@CateID AND TB_News.Status=1

ORDER BY TB_News.idNews DESC

RETURN

END
Tiếp theo mình sẽ viết Store procedure đề lấy danh sách 10 bài viết mới hơn và 10 bài viết cũ hơn gần nhất (Nếu có)

-- =============================================

-- Author: [You must be registered and logged in to see this link.]

-- Description: <truy vấn danh sách các bài viết khác cùng chuyên mục>

-- =============================================

CREATE PROCEDURE [dbo].[spTB_News_SelectCacBaiVietKhac]

@idNews int,

@CateID int

AS

BEGIN

DECLARE @SQL nvarchar(4000)

SET @SQL=''

-- Kiểm tra có bài viết mới hơn không

DECLARE @countNew int

SELECT @countNew = count(idNews) FROM TB_News

WHERE TB_News.idNews>@idNews AND CateID=@CateID AND Status=1

IF @countNew IS NULL SET @countNew=0

-- Kiểm tra có bài viết cũ hơn không

DECLARE @countOld int

SELECT @countOld = COUNT(idNews) FROM TB_News

WHERE idNews<@idNews AND CateID=@CateID AND Status=1

IF @countOld IS NULL SET @countOld=0

--Nếu có bài viết mới hơn

IF @countNew>0

BEGIN

-- Nếu có bài viết cũ hơn thì truy vấn 10 bài mới và 10 bài viết gần nhất

IF @countOld >0

BEGIN

SET @SQL=@SQL+ N'SELECT 999999999999 AS idNews,

N''<b>[Các bài viết mới hơn]</b>'' AS Title

Union

SELECT TOP 10 TB_News.idNews,

''<A href=''+ dbo.ufDomainName()+TB_News.Link +''>''+TB_News.Title+''</a>'' as Title FROM TB_News

INNER JOIN TB_Category ON TB_News.CateID = TB_Category.CateID

WHERE TB_News.Status=1 AND TB_News.idNews>'+cast(@idNews AS nvarchar(20))+' AND

TB_News.CateID='+cast(@CateID AS nvarchar(20))+'

'

SET @SQL =@SQL+'

Union SELECT '+cast(@idNews AS nvarchar(20))+' AS idNews,

N''<b>[Các bài đã đăng]</b>'' AS Title

Union

Select idNews, Title from [dbo].[fuOldOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')

ORDER BY TB_News.idNews DESC'

END

-- Ngược lại chỉ truy vấn 10 bài viết mới hơn gần nhất

ELSE

BEGIN

SET @SQL =@SQL+N'SELECT 999999999999 AS idNews, N''<b>[Các bài mới hơn]</b>'' AS Title

UNION

Select idNews, Title from [dbo].[fuNewOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')

ORDER BY idNews DESC'

END

END

-- Nếu không có bài viết mới hơn => truy vấn 10 bài viết cũ hơn gần nhất

ELSE

BEGIN

SET @SQL =@SQL+N'SELECT 999999999999 AS idNews, N''<b>[Các bài đã đăng]</b>'' AS Title

UNION

Select idNews, Title from [dbo].[fuOldOfNews]('+Cast(@idNews AS nvarchar(20))+','+Cast(@CateID AS nvarchar(20))+')

ORDER BY idNews DESC'

END

--PRINT @SQL

-- Thực thi trà về danh sách bài viết

EXEC (@SQL)

END
Ví dụ khi bạn đọc bài viết thứ 13 có id=17 và CateID=5 EXEC [spTB_News_SelectCacBaiVietKhac] 17,5

Kết quả hiển thị như minh họa sau




Chúc bạn thành công

Xem lý lịch thành viên http://root.nicetopic.net

2 Re: Viết Stored PROCEDURE phần 6 on Thu May 31, 2012 6:29 pm

mình thấy cách tình bày của admin chán quá...mà giao diện trình bày nhìn như thế này.rất là rối mắt.. đọc không liền mạch gì cả..đề nghĩ admin thay đổi giao diện với cỡ chữ đi nhé..

Xem lý lịch thành viên

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Permissions in this forum:
Bạn không có quyền trả lời bài viết