ALTER PROCEDURE dbo.forum_GetPostsToCategory
(
@CategoryId int,
@PageSize int = 30,
@UserName varchar(256),
@CurrentPage int = 1
)
AS
BEGIN
SELECT p.UserName, p.PostId, p.Header, p.Date, p.Locked, p.Sticky, p.Anonymous, p.Visit
FROM forum_Post AS p
left outer join forum_Post AS op
ON op.ParentPostId = p.PostId
WHERE (p.CategoryId = @CategoryId AND p.ParentPostId = 0) AND p.Deleted = 0
GROUP BY p.PostId, op.Date, p.ParentPostId, p.CategoryId, p.UserId, p.Header, p.Date, p.Message, p.Locked, p.Sticky, p.Deleted, p.Anonymous, p.Visit, p.UserName
ORDER BY p.Sticky DESC, LastPostDate DESC
Nu vill jag räkna ut mha av @CurrentPage samt @PageSize vilka poster som ska hämtas. I MySQL går det ju att anv. LIMIT men hur gör man i MSSQL? Om man tex enbart ska visa posterna 31-60?
ALTER PROCEDURE dbo.forum_GetPostsToCategory
(
@CategoryId int,
@PageSize int = 30,
@UserName varchar(256),
@CurrentPage int = 1
)
AS
BEGIN
WITH forumPosts AS
(
SELECT p.UserName, p.PostId, p.Header, p.Date, p.Locked, p.Sticky, p.Anonymous, p.Visit, p.LastPostDate, ROW_NUMBER() OVER (p.Sticky DESC, LastPostDate DESC) AS RowNumber
FROM forum_Post AS p
left outer join forum_Post AS op
ON op.ParentPostId = p.PostId
WHERE (p.CategoryId = @CategoryId AND p.ParentPostId = 0) AND p.Deleted = 0
GROUP BY p.PostId, op.Date, p.ParentPostId, p.CategoryId, p.UserId, p.Header, p.Date, p.Message, p.Locked, p.Sticky, p.Deleted, p.Anonymous, p.Visit, p.UserName, p.LastPostDate
)
DECLARE @startRow int
DECLARE @endRow int
SELECT @startRow = (@CurrentPage - 1) * @PageSize + 1
SELECT @endRow = @startRow + @pageSize - 1
SELECT * FROM forumPosts f WHERE f.RowNumber BETWEEN @startRow AND @endRow ORDER BY f.Sticky DESC, f.LastPostDate DESC
Tack, får dock felmeddelandet "Incorrect syntax near '.'." Inte mycket den talade om :(
Ang. GROUP BY så vet jag inte om det behövs, la till de allt eftersom felmeddelanden kom ang det.
Så frågan är då vad syntax felet är?
CREATE PROCEDURE dbo.forum_GetPostsToCategory
(
@CategoryId int,
@PageSize int = 30,
@UserName varchar(256),
@CurrentPage int = 1
)
AS
BEGIN
WITH forumPosts AS
(
SELECT p.UserName, p.PostId, p.Header, p.Date, p.Locked, p.Sticky, p.Anonymous, p.Visit, p.LastPostDate, ROW_NUMBER() OVER (ORDER BY p.Sticky DESC, p.LastPostDate DESC) AS RowNumber
FROM forum_Post AS p
left outer join forum_Post AS op
ON op.ParentPostId = p.PostId
WHERE (p.CategoryId = @CategoryId AND p.ParentPostId = 0) AND p.Deleted = 0
GROUP BY p.PostId, op.Date, p.ParentPostId, p.CategoryId, p.UserId, p.Header, p.Date, p.Message, p.Locked, p.Sticky, p.Deleted, p.Anonymous, p.Visit, p.UserName, p.LastPostDate
)
SELECT * FROM forumPosts f WHERE f.RowNumber BETWEEN (@CurrentPage - 1) * @PageSize + 1 AND @PageSize * @CurrentPage ORDER BY f.Sticky DESC, f.LastPostDate DESC