Ima*_*man 8 sql-server-2008 t-sql paging
我有这个查询来对结果进行分页,它在 SQL Server 2012 上运行良好。但是我不得不将我的数据库移动到 SQL Server 2008,现在我的存储过程不起作用。我做了一些研究,发现OFFSET
它在 SQL Server 2008 中不起作用。我现在应该使用什么替代方案?我如何使用 SQL Server 2008 实现相同的功能?
这是我的存储过程:
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
Run Code Online (Sandbox Code Playgroud)
Ard*_*oli 14
使用公用表表达式 (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
Run Code Online (Sandbox Code Playgroud)