現在SQL Server 2014 Professionalを使用していますが、現在のバージョンは(12.0.4100)です。ビューがあり、特定のオフセットで10行をSELECTしようとしています。
私のビューは以下のようなものです:SQL Server 2014 ORDER BY句とOFFSET FETCH NEXTは奇妙な結果を返します
BeginTime | EndTime | Duration | Name
09:00:00.0000000|16:00:00.0000000| 1 | some_name1
09:00:00.0000000|16:00:00.0000000| 2 | some_name2
09:00:00.0000000|16:00:00.0000000| 3 | some_name3
09:00:00.0000000|16:00:00.0000000| 4 | some_name4
09:00:00.0000000|16:00:00.0000000| 5 | some_name5
09:00:00.0000000|16:00:00.0000000| 6 | some_name6
09:00:00.0000000|16:00:00.0000000| 7 | some_name7
これらおよびすべてのBeginTime
とEndTime
でまったく同じ値を持つように100行があります。関連する表の期間は1から100まで増分されます。
クエリが唯一の場合:
SELECT * FROM View_Name
結果セットは正しいです。期間の列を調べることでわかります。
0から始まる10行だけをフェッチしたい場合、ResultSetは正しいものであり、最大18まで開始することが正しいです。19から始まったり10以上の行をフェッチしたい場合、ResultSetのDurationは無関係な結果を返しますDurationのように逆転した。しかし、それは次のように、私は特定の行をフェッチするために使用されるクエリである以上11 よりも持続時間を有する行を返すことはありません:
SELECT * FROM View_Name ORDER BY BeginTime ASC OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY
このような状況では奇妙な何かがもあります。 USE master
と指定するとこの問題は解消されますが、USE [mydb_name]
と指定した場合は、問題が再び表示されます。
ところで、私は自分のローカルPCでSQL Server 2014 Professional v(12.0.2269)を使用していますが、この問題は上記の状況では消えます。
PS:私はUSE master
を使用できません。なぜなら、ビューを動的に作成し、ストアドプロシージャにリストするからです。
ヘルプ、解答、またはコメントを受け付けます。
ありがとう!
おかげで、私はあなたが慎重に質問をお読みたいです。 –
正しいものと正しいものではないことを明確にしてください。私は最初のクエリで正しい結果を得ていると仮定しています(あなたが外注をしていない限りは保証されません)。オフセットとフェッチで同じ結果を得られません。 – TheGameiswar
'SELECT * FROM View_Name ORDER BY BeginTime ASC'は正しい順序を返します!あなたの注意のために。 –