2

ストアド プロシージャでフィルター処理、並べ替え、およびページング操作を行います。これらの操作の順序は、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
4

1 に答える 1