J'ai cette requête pour paginer les résultats et cela fonctionnait bien sur SQL Server 2012. Cependant, j'ai dû déplacer ma base de données vers SQL Server 2008 et maintenant ma procédure stockée ne fonctionne pas. J'ai fait quelques recherches et j'ai appris que OFFSET
ne fonctionne pas dans SQL Server 2008. Quelle alternative dois-je utiliser maintenant? Comment obtenir la même fonctionnalité avec SQL Server 2008?
Voici ma procédure stockée:
CREATE PROCEDURE [dbo].[sp_JobSearch]
@EnteredKeyword nvarchar(200) = '',
@EnteredLocation nvarchar(200) = '',
@PageNumber INT = 1,
@PageSize INT = 40
AS
BEGIN
SELECT
MasterJob.Title, MasterJob.CompanyName,
MasterJob.ShortDesc, MasterJob.Url,MasterJob.PostedTime,
MasterJob.Location, JobBoard.JobBoardName
FROM
MasterJob
LEFT JOIN
JobBoard ON MasterJob.JobBoardId = JobBoard.JobBoardId
WHERE
(MasterJob.Title LIKE '%' + @EnteredKeyword + '%')
AND (MasterJob.Location LIKE '%' + @EnteredLocation + '%')
ORDER BY
[MasterJobId]
OFFSET @PageSize * (@PageNumber - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY;
END
Utilisez une expression de table commune (CTE):
CREATE PROCEDURE [dbo].[sp_JobSearch]
@EnteredKeyword nvarchar(200) = '',
@EnteredLocation nvarchar(200) = '',
@PageNumber INT = 1,
@PageSize INT = 40
AS
BEGIN
WITH CTE AS
(
SELECT
ROW_NUMBER() OVER ( ORDER BY [MasterJobId] ) AS RowNum ,
MasterJob.Title, MasterJob.CompanyName, MasterJob.ShortDesc,
MasterJob.Url,MasterJob.PostedTime, MasterJob.Location, JobBoard.JobBoardName
FROM MasterJob
LEFT JOIN JobBoard ON MasterJob.JobBoardId = JobBoard.JobBoardId
WHERE
(MasterJob.Title LIKE '%' + @EnteredKeyword + '%')
AND( MasterJob.Location LIKE '%' + @EnteredLocation + '%' )
)
SELECT
Title, CompanyName, ShortDesc, Url, PostedTime, Location, JobBoardName
FROM CTE
WHERE
(RowNum > @PageSize * (@PageNumber - 1) )
AND
(RowNum <= @PageSize * @PageNumber )
Order By RowNum
END