@currentDate,
@sortOrder,
@pageSize,
@pageIndex,
default
) Content
ORDER BY
IndexID
这个存储过程使用了两个减少代码和将来维护量的技巧。首先,我们使用了Content.*作为返回的结果,这里还使用了CSK中的存储过程。从效率上来说,取回所有的列比让数据库推算哪些列是需要的在返回要更有效率。而且,在这里设计师为了更好的兼顾了维护性。如果将来Community_Contentpages的结构有了修改(如增加列),并不需要修改或测试相关的存储过程。
第二个要指出的是结果集中的两个空列(Faq_Answer和Faq_Reference)。后面我们将写一个FaqInfo组件来保存来自这个存储过程的多条记录和后面一个存储过程的单条记录。由于我们想使用同一个组件来实现这两种操作,所以我们要填充所有列的信息。因为这两个列可能占用很大空间,而且不会在FAQ的统计列表中显示,所以这里我们就用NULL值来代替。
这个存储过程我们要用来取得一条单独的记录和其它相关的功能。它还需要增加这个页面的访问计数和告诉用户开始读取页面的内容。这些任务是通过执行CSK的Community_ContnetpagesTrackStats过程来完成的,整个过程代码如下:
CREATE PROCEDURE Community_FaqsGetFaq
(
@communityID INT,
@username NVarchar(50),
@contentPageID int
)
AS
DECLARE @userID INT
SET @userID = dbo.Community_GetUserID(@communityID, @username)
-- Update ViewCount and HasRead Stats
EXEC Community_ContentPagesTrackStats @userID, @contentPageID
DECLARE @currentDate DATETIME
SET @currentDate = GetUtcDate()
SELECT
Faq_Answer,
Faq_Reference,