3

SQL Server 2012 で奇妙な問題が発生しました。

私はこのようなクエリを使用します

SELECT * FROM table ORDER BY field OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY

このクエリを 0 から 25、25 から 50、50 から 75、75 から 100 の範囲で使用するたびに、同じ 25 レコードが返されます。

100~125で使うと元の25~50に戻るとか…

私のテーブルには 197 のレコードしか含まれておらず、これはデータベースの 1 つのテーブルでのみ発生します。他のすべてのテーブルは正しく機能します。

これは、コード (ASP.NET C#) および SQL Management Studio から直接クエリを使用した場合にも発生します。

4

3 に答える 3

2

OFFSET FETCH NEXT注文している列に一意のデータが含まれていない場合、びっくりします。個別の列を「偽造」するには、次のようにします。

SELECT * FROM table 
ORDER BY ROW_NUMBER() over (order by field) 
OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY
于 2016-06-28T09:28:49.617 に答える
1

アクティブなページを含めるには、ロジックを少し変更する必要があります。

DECLARE @pagesize AS BIGINT = 25, @pagenum AS BIGINT = 3; 

SELECT * 
FROM table 
ORDER BY field 
OFFSET @pagesize * @pagenum ROWS FETCH NEXT @pagesize ROWS ONLY;
于 2013-04-03T10:02:59.803 に答える