1

興味深い質問があります。コンマで区切られた整数の文字列を取得する関数があります。

これが2つの実行です:

select ID from dbo.udf_NumList2table ('124,126,132,180,176')
select RP.ID, My.ID 
from dbo.udf_NumList2table ('124,126,132,180,176') RP join MyTable My
        on RP.ID=My.ID

最初の実行では、結果の順序は文字列内の数字の順序と同じです。2回目の実行では、結果の順序は昇順です(180の前に176)。

なんで?MyTableの列IDのPKが理由だと思います-SQLはキーで実行することを好みます。

私は正しいですか?

4

1 に答える 1

2

Selectは結果の順序がないことを保証するため、実行するたびに結果が同じであるとは限りません。ただし、データが非常に小さいため、結果は同じになります。順序はオプティマイザにとって最も便利なため、ここでの推測は正しいかもしれません。

データ量が多い場合、クエリは実行のさまざまなスレッドに分割される可能性があるため、順序が混乱し、サーバーのワークロードによっては実行ごとに異なる可能性があります。

一貫した順序を取得するには、ORDER BY句を使用する必要があります。

于 2013-02-26T09:27:24.907 に答える