ストアド プロシージャでフィルター処理、並べ替え、およびページング操作を行います。これらの操作の順序は、search->order->pagingの実行順序にする必要があります。ストアド プロシージャが order by ステートメントを最初に実行するのか、検索操作を最初に実行するのかわかりません。だから私の質問は:
1) このストアド プロシージャの実行順序は?
2) order by ステートメントが search ステートメントの前に実行される場合、検索操作を最初に実行するにはどうすればよいですか?
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