cs_forums_Posts_PostSet

本文介绍了一个 SQL Server 存储过程,用于处理论坛帖子的分页显示和排序功能,涉及事务隔离级别设置、临时表创建及多种排序条件。
None.gifALTER  PROCEDURE dbo.cs_forums_Posts_PostSet
None.gif(
None.gif    
@PostID    int,
None.gif    
@PageIndex int,
None.gif    
@PageSize int,
None.gif    
@SortBy int,
None.gif    
@SortOrder bit,
None.gif    
@UserID int,
None.gif    
@ReturnRecordCount bit,
None.gif    
@AllowUnapproved bit = 0,
None.gif    
@SettingsID int
None.gif)
None.gif
AS
None.gif
SET Transaction Isolation Level Read UNCOMMITTED
ExpandedBlockStart.gifContractedBlock.gif
/**//*设置事务隔离级别,Read UNCOMMITTED  执行脏读或 0 级隔离锁定,这表示不发出共享锁,
InBlock.gif  也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更
InBlock.gif  改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有
ExpandedBlockEnd.gif  语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。
*/

None.gif
None.gif
BEGIN
None.gif
None.gif
DECLARE @PageLowerBound int
None.gif
DECLARE @PageUpperBound int
None.gif
DECLARE @ThreadID int
None.gif
DECLARE @SectionID int
None.gif
None.gif
-- First set the rowcount
None.gif--
 首先设置行数
None.gif
DECLARE @RowsToReturn int
None.gif
SET @RowsToReturn = @PageSize * (@PageIndex + 1)
None.gif
SET ROWCOUNT @RowsToReturn
None.gif
None.gif
-- Set the page bounds
None.gif--
 设置也面绑定
None.gif
SET @PageLowerBound = @PageSize * @PageIndex
None.gif
SET @PageUpperBound = @PageLowerBound + @PageSize + 1
None.gif
None.gif
-- Get the ThreadID
None.gif--
 获取主题ID
None.gif
SELECT
None.gif    
@ThreadID = ThreadID,
None.gif    
@SectionID = SectionID
None.gif
FROM 
None.gif    cs_Posts 
None.gif
WHERE 
None.gif    PostID 
= @PostID and SettingsID = @SettingsID
None.gif
None.gif
-- Is the Forum 0 (If so this is a private message and we need to verify the user can view it
None.gif--
 如果是条个人消息我们要确认用户是否有权查看
None.gif
IF @SectionID = 0
None.gif
BEGIN
None.gif    
IF NOT EXISTS (SELECT UserID FROM cs_PrivateMessages WHERE UserID = @UserID AND ThreadID = @ThreadID AND SettingsID = @SettingsID)
None.gif        
RETURN
ExpandedBlockStart.gifContractedBlock.gif             
/**//*不存在此用户的ID就返回*/
None.gif
END
None.gif
None.gif
-- Create a temp table to store the select results
None.gif--
 如果不是个人消息
None.gif
CREATE TABLE #PageIndex 
None.gif(
None.gif    IndexID 
int IDENTITY (11NOT NULL,
None.gif    PostID 
int
None.gif)
None.gif
None.gif
-- Sort by Post Date
None.gif--
 按帖子日期排序
None.gif
IF @SortBy = 0 AND @SortOrder = 0
None.gif    
INSERT INTO #PageIndex (PostID)
None.gif    
SELECT PostID FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID and SettingsID = @SettingsID ORDER BY PostDate
None.gif
None.gif
ELSE IF @SortBy = 0 AND @SortOrder = 1
None.gif    
INSERT INTO #PageIndex (PostID)
None.gif    
SELECT PostID FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID and SettingsID = @SettingsID  ORDER BY PostDate DESC
None.gif
None.gif
-- Sort by Author
None.gif--
 按作者ID排序
None.gif
IF @SortBy = 1 AND @SortOrder = 0
None.gif    
INSERT INTO #PageIndex (PostID)
None.gif    
SELECT PostID FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID and SettingsID = @SettingsID  ORDER BY UserID
None.gif
None.gif
ELSE IF @SortBy = 1 AND @SortOrder = 1
None.gif    
INSERT INTO #PageIndex (PostID)
None.gif    
SELECT PostID FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID and SettingsID = @SettingsID  ORDER BY UserID DESC
None.gif
None.gif
-- Sort by SortOrder
None.gif--
 按排序类型排序
None.gif
IF @SortBy = 2 AND @SortOrder = 0
None.gif    
INSERT INTO #PageIndex (PostID)
None.gif    
SELECT PostID FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID and SettingsID = @SettingsID  ORDER BY SortOrder
None.gif
None.gif
ELSE IF @SortBy = 2 AND @SortOrder = 1
None.gif    
INSERT INTO #PageIndex (PostID)
None.gif    
SELECT PostID FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID and SettingsID = @SettingsID  ORDER BY SortOrder DESC
None.gif
None.gif
-- Select the individual posts
None.gif--
 查询个人的帖子
None.gif
SELECT
None.gif    P.PostID, P.ThreadID, P.ParentID, P.PostAuthor, P.UserID, P.SectionID, P.PostLevel, P.SortOrder, P.Subject, P.PostDate, P.IsApproved,
None.gif    P.IsLocked, P.IsIndexed, P.TotalViews, P.Body, P.FormattedBody, P.IPAddress, P.PostType, P.EmoticonID, P.SettingsID, P.AggViews,
None.gif    P.PropertyNames 
as PostPropertyNames, P.PropertyValues as PostPropertyValues,
None.gif    P.PostConfiguration, P.UserTime, P.ApplicationPostType, P.PostName,
None.gif    P.Points 
as PostPoints, P.RatingSum as PostRatingSum, P.TotalRatings as PostTotalRatings,
None.gif    T.
*, U.*, #PageIndex.*,
None.gif    T.IsLocked,
None.gif    T.IsSticky,
None.gif    Username 
= P.PostAuthor,
None.gif    ThreadStarterAuthor 
= T.PostAuthor,
None.gif    ThreadStartDate 
= T.PostDate,    
None.gif    EditNotes 
= (SELECT EditNotes FROM cs_PostEditNotes WHERE PostID = P.PostID),
None.gif    AttachmentFilename 
= ISNULL ( (SELECT [FileName] FROM cs_PostAttachments WHERE PostID = P.PostID), ''),
None.gif    Replies 
= 0--not used(SELECT COUNT(P2.PostID) FROM cs_Posts P2 (nolock) WHERE P2.ParentID = P.PostID AND P2.PostLevel != 1),
None.gif
    IsModerator = 0-- not used
None.gif
    HasRead = 0 -- not used
None.gif
FROM 
None.gif    cs_Posts P (nolock),
None.gif    cs_Threads T,
None.gif    cs_vw_Users_FullUser U,
None.gif    #PageIndex
None.gif
WHERE 
None.gif    P.PostID 
= #PageIndex.PostID AND
None.gif    P.UserID 
= U.cs_UserID AND
None.gif    T.ThreadID 
= P.ThreadID AND
None.gif    #PageIndex.IndexID 
> @PageLowerBound AND
None.gif    #PageIndex.IndexID 
< @PageUpperBound and U.SettingsID = @SettingsID
None.gif
ORDER BY
None.gif    IndexID
None.gif
END
None.gif
None.gif
IF @ReturnRecordCount = 1
ExpandedBlockStart.gifContractedBlock.gif   
/**//*查询匿名状况下的总数吧,算了,卡语法吧.要懂参数还要看程序,真麻烦*/
None.gif  
SELECT count(PostID) FROM cs_Posts (nolock) WHERE (IsApproved = 1 OR 1 = @AllowUnapprovedAND ThreadID = @ThreadID  and SettingsID = @SettingsID
None.gif

转载于:https://www.cnblogs.com/ruanbl/archive/2006/09/20/509725.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值