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 сообщений.
Я думал, что если я передам обратно другой DataTable
, содержащий либо true
, либо false
, который представлял бы, если в базе данных осталось более 6 этих сообщений с использованием последнего идентификатора строки, я мог бы использовать этот флаг для включить / отключить кнопку «загрузить еще». Это хорошая идея? Если нет, то какой план лучше?
Если это так, как бы я изменил этот процесс, чтобы передать этот флаг обратно?