我在存储过程中进行过滤、排序和分页操作。这些操作的顺序应该是search->order->paging的执行顺序。我不知道我的存储过程是先按语句排序还是先搜索操作。所以我的问题是:
1)这个存储过程的执行顺序是什么?
2)如果order by语句在搜索语句之前执行,我怎样才能让搜索操作首先执行?
CREATE PROCEDURE [dbo].[Grid_Feedbacks_Select_All]
@search nvarchar(100),
@orderby nvarchar(50),
@orderbydirection nvarchar(4),
@skipLength int,
@length int
AS
BEGIN
--THIS PART IS ORDER BY PART
WITH CTE_Results
AS (
SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN (@orderby = 'Subject' AND @orderbydirection='asc')
THEN Subject
END ASC,
CASE WHEN (@orderby = 'Subject' AND @orderbydirection='desc')
THEN Subject
END DESC,
CASE WHEN (@orderby = 'Text' AND @orderbydirection='asc')
THEN Text
END ASC,
CASE WHEN @orderby = 'Text' AND @orderbydirection='desc'
THEN Text
END DESC
) AS ROWNUM,
Count(*) over () AS TotalCount,
(
--THIS PART IS SEARCH PART
SELECT COUNT(*) FROM Feedbacks f(nolock)) AS TotalRecordsCount,
f.Id,
f.Response,
f.Subject,
f.Text,
u.Username,
c.FirmName,
c.Name,
c.Surname
FROM Feedbacks f(nolock), Users u, Customers c
WHERE
f.UserId = u.Id
AND u.CustomerId = c.Id
OR(f.Text LIKE '%' + @search + '%')
OR (u.Username LIKE '%' + @search + '%')
OR (c.Name LIKE '%' + @search + '%')
)
--THIS PART IS PAGING PART
SELECT * FROM CTE_Results AS CPC
WHERE CPC.ROWNUM > @skipLength AND
CPC.ROWNUM < @skipLength + @length + 1
ORDER BY CPC.ROWNUM ASC
END