入力パラメーターが取得する行の量と並べ替え基準を指定する、並べ替えられた SQL クエリから最初の数行を取得しようとするストアド プロシージャを使用しています。
最初の数行を適切に取得できましたが、結果を並べ替えようとすると、デフォルトの基準 (主キー) を使用して並べ替えられたように見えます。
それで、誰かがそれを見てくれるかどうか疑問に思っていましたか?
USE [database]
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[x0]
@username nvarchar(50),
@sortBy varchar(50),
@sortDirection varchar(4),
@startRow int,
@endRow int
AS
With Ordering AS(
SELECT ROW_NUMBER() OVER (Order by
CASE WHEN @sortBy='datecreate' THEN 'datecreate'
WHEN @sortBy='id' THEN 'id'
WHEN @sortBy='DisplayName' THEN 'DisplayName'
END,
CASE WHEN @sortDirection='asc' THEN 'asc'
WHEN @sortDirection='desc' THEN 'desc'
END) AS RowNumber,
dbo.x1.*, dbo.x2.*
FROM dbo.x1 INNER JOIN dbo.x2 ON dbo.x1.type = dbo.x2.type
where username = @username
)
SELECT RowNumber, *, DisplayName AS DisplayName
FROM Ordering
Where RowNumber BETWEEN @startRow AND @endRow
また、並べ替え基準を外側の SQL クエリ (RowNumber BETWEEN @startRow AND @endRow) に移動しようとしましたが、あまりうまくいきませんでした。