【发布时间】:2011-06-27 03:38:39
【问题描述】:
ALTER PROCEDURE [dbo].[spGetMessages]
@lastRow int
AS
BEGIN
-- Insert statements for procedure here
DECLARE @StartRow INT,@EndRow INT
SELECT @StartRow = (@lastRow + 1), @EndRow = (@lastRow + 6)
;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN @sort = 'votes1' THEN m.votes END DESC,
CASE WHEN @sort = 'votes2' THEN m.votes END ASC,
CASE WHEN @sort = 'age1' THEN datediff(minute,m.timestamp, getdate()) END ASC,
CASE WHEN @sort = 'age2' THEN datediff(minute,m.timestamp, getdate()) END DESC
) AS rows,
m.message,
m.messageId
FROM
tblMessages m
WHERE
m.deleted != 1
)
SELECT *
FROM cte WHERE ROWS BETWEEN @StartRow AND @EndRow
ORDER BY rows
END
所以这个过程给我带来了一堆消息,但传递了最后一行的值,这样我就可以实现分页,并在前端实现“加载更多”功能。
如果 proc 返回的消息少于 6 条,我显然可以禁用“加载更多”,但如果它返回 6 条消息,我不知道数据库中是否还有更多消息,或者那些是最后 6 条消息。
我的想法是,如果我传回另一个包含 true 或 false 的 DataTable,表示使用最后一行 id 在数据库中剩余的消息是否超过这 6 条,我可以使用此标志来启用/禁用“加载更多”按钮。这是一个好主意吗?如果没有,有什么更好的计划?
如果是这样,我将如何修改此过程以将标志传回?
【问题讨论】:
-
通过参数返回总记录数如何?然后你也可以计算你有多少页
-
根据最后一个 rowId,LEFT 的总记录数是我认为的目标。
标签: .net tsql sql-server-2008 stored-procedures paging