DECLARE @StartRow INT
SET @StartRow = ( cast(@PageIndex as int) * cast(@NumberOfRows as int) ) + 1 ;
WITH CTE
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY CASE
WHEN @SortColumnName = 'ID'
AND @SortOrderBy = 'asc'
THEN sod.ID
END ASC, CASE
WHEN @SortColumnName = 'ID'
AND @SortOrderBy = 'desc'
THEN sod.ID
END DESC, CASE
WHEN @SortColumnName = 'MessageText'
AND @SortOrderBy = 'asc'
THEN MessageText
END ASC, CASE
WHEN @SortColumnName = 'MessageText'
AND @SortOrderBy = 'desc'
THEN MessageText
END DESC, CASE
WHEN @SortColumnName = 'TO'
AND @SortOrderBy = 'desc'
THEN [TO]
END DESC
) AS RN ,
[SendedDate]
,[UserID]
,sod.[ID]
,[SmsOutboxID]
,[MessageID]
,[FolderID]
,[From]
,[TO]
,[MessageText]
,[SendedType]
,[SendedStatus]
,[IsDelete]
,[NumberOfMessage]
,[MessageType]
,[PricesbySMS]
,[Sended]
FROM SMS_Outbox so inner join SMS_OutboxDetails sod on so.ID = sod.SmsOutboxID where so.UserID = @UserID and sod.SendedType = @Type and sod.IsDelete = 0)
SELECT *
FROM CTE
WHERE RN BETWEEN case @Excel when 0 then (@StartRow - cast(@NumberOfRows AS int)) else @NumberOfRows end
AND case @Excel when 0 then (@StartRow - 1) else @PageIndex end