0

複数の結果を生成する SELECT クエリがあり、ORDER BY 句はありません。このクエリを複数回実行し、DataReader.NextResult() を使用して結果を反復すると、同じ順序で結果が得られることが保証されますか?

たとえば、199 行を返す次のクエリを実行するとします。

SELECT * FROM products WHERE productid < 200

productid = 1 などで常に最初の結果を取得しますか?

私が観察した限り、結果は常に同じ順序で返されますが、この動作に関するドキュメントは見つかりません。

======================================

私の調査によると、このブログConor vs. SQLをチェックしてください。テーブル内のデータが同じままであっても(つまり、更新も削除もされていない)、クエリ結果が変化するかどうかを実際に尋ねたかったのです。しかし、大きなテーブルの場合、SQLサーバーの従業員が並列処理を行うと、順序が異なる場合があるようです

4

3 に答える 3

7

まず、 a の行を反復するには、 ではなくDataReaderを呼び出す必要があります。クエリに複数のステートメントがある場合、 呼び出しは次の結果セットに移動します。ReadNextResult
NextResultSELECT

あなたの質問に答えるには、これに頼ってはいけません。
句のないクエリはORDER BY、SQL Server の既定の反復順序で行を返します。
小さなテーブルの場合、これは通常、行が追加された順序になりますが、これは保証されておらず、いつでも変更される可能性があります。たとえば、テーブルがインデックス化またはパーティション化されている場合、順序は異なります。

于 2009-12-31T13:50:01.247 に答える
3

いいえ、DataReader は SQL から返された順序で結果を返します。ORDER BY 句を指定しない場合、テーブルに存在する順序になります。

于 2009-12-31T13:48:56.460 に答える
1

常に同じ順序で返される可能性がありますが、これは保証されていません。順序は、データベース サーバーのクエリ プラン (少なくとも SQL Server では) によって決まります。何かがそのクエリプランを変更すると、順序が変わる可能性があります。結果の順序がデータの処理にとって重要な場合は、常に ORDER BY を使用する必要があります。

于 2009-12-31T13:51:42.290 に答える