У меня ниже хранимой процедуры в SQL Server 2016, там нормально работает.
Теперь мне нужно создать тот же SP в SQL 2008, теперь я получаю сообщение об ошибке:
Сообщение 102, Уровень 15, Состояние 1, Процедура GetEmployees, Строка 41 [Пакет
Строка начала 0] Неверный синтаксис рядом с 'OFFSET' . Сообщение 153, уровень 15, состояние
2, процедура GetEmployees, строка 42 [Batch Start Line 0] Недопустимое использование
опции NEXT в операторе FETCH.
Как изменить тот же процесс, чтобы он мог работать и над SQL 2008.
--dbo.GetEmployees '',2,2
CreatePROCEDURE [dbo].GetEmployees
(
@SearchValue NVARCHAR(50) = '',
@PageNo INT = 0,
@PageSize INT = 10,
@SortColumn NVARCHAR(20) = 'Name',
@SortOrder NVARCHAR(20) = 'ASC'
)
AS BEGIN
SET NOCOUNT ON;
if @PageNo<0 set @PageNo=0
set @PageNo=@PageNo+1
SET @SearchValue = LTRIM(RTRIM(@SearchValue))
Set @SearchValue= nullif(@SearchValue,'')
; WITH CTE_Results AS
(
SELECT EmployeeID, Name, City from tblEmployee
WHERE (@SearchValue IS NULL OR Name LIKE '%' + @SearchValue + '%')
ORDER BY
CASE WHEN (@SortColumn = 'EmployeeID' AND @SortOrder='ASC')
THEN EmployeeID
END ASC,
CASE WHEN (@SortColumn = 'EmployeeID' AND @SortOrder='DESC')
THEN EmployeeID
END DESC,
CASE WHEN (@SortColumn = 'Name' AND @SortOrder='ASC')
THEN Name
END ASC,
CASE WHEN (@SortColumn = 'Name' AND @SortOrder='DESC')
THEN Name
END DESC,
CASE WHEN (@SortColumn = 'City' AND @SortOrder='ASC')
THEN City
END ASC,
CASE WHEN (@SortColumn = 'City' AND @SortOrder='DESC')
THEN City
END DESC
OFFSET @PageSize * (@PageNo - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY
),
CTE_TotalRows AS
(
select count(EmployeeID) as MaxRows from tblEmployee WHERE (@SearchValue IS NULL OR Name LIKE '%' + @SearchValue + '%')
)
Select MaxRows TotalRecords, t.EmployeeID, t.Name, t.City,t.Department,t.Gender from dbo.tblEmployee as t, CTE_TotalRows
WHERE EXISTS (SELECT 1 FROM CTE_Results WHERE CTE_Results.EmployeeID = t.EmployeeID)
OPTION (RECOMPILE)
END