web-dev-qa-db-fra.com

OFFSET FETCH dans SQL Server 2008

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
7
Iman

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
12
Ardalan Shahgholi