選択:奇妙な行動 - ランダム私は時間のために、以下のステートメントをデバッグされている
SELECT
(
SELECT t1.anotherColumn
FROM table1 t1
WHERE t1.aColumn=(1+ABS(Checksum(NewId()))%54)
) res, *
FROM
(
SELECT TOP 200 * --PLEASE NOTICE HERE
FROM table2
)RESULT
と問題が常にres
は、各行に対して同じ値が含まれていることです。ここで、176
より下の任意の数字にクエリ文でハイライトされている200
を変更すると、希望の結果であるtable1
のランダムな行が表示されます。 54
は結果に影響を及ぼさないことに注意してください。私のテーブルはaColumn
に対して1から54までの54の異なる値を持つためです。
私はこのテーブルを別のテーブルで試してみましたが、この奇妙な動作が繰り返されています!
クエリオプティマイザがここで動作しているようです。 –
@TimBiegeleisen SQL Serverがシーンの裏側で何かをしていることがわかりました。それはおそらくクエリオプティマイザです。どうか知っていなければわかりません。ところで、ありがとう、私のためにそれをしないでくださいと言う方法があるはずです! – mok
各結果行に対して最初のサブクエリを実行するようにエンジンを強制する必要があります。最初のサブクエリにダミー条件を追加して、「AND result.id is not null」のような相関クエリを作成してください。 – trincot