3
ORDER BY句を使用して大きなテーブルからTOP 10行を選択し、列値の1つを更新するMERGEステートメントを作成したいとします。 MERGEステートメントでTOP 10行を選択することができますが、ORDER BY節はどこにでも置くことができませんでした。SQL Server MERGEステートメントとORDER BY句
MERGE TOP(10) StudentAllocation AS SA
USING (SELECT @sub_id AS subId) AS TSA ON SA.sub_id = TSA.subId
WHEN MATCHED THEN
UPDATE SET SA.exam_batch = 1);
どうもありがとうマーティンを使用する方が簡単かもしれませんが。これは完璧なソリューションでした.... :) –
この特定のシナリオでは、ソリューションは正しいです。ただし、 'MERGE'で指定された' TOP'節は 'WHEN MATCHED \ NOT MATCHED'文の中の追加の' WHERE'節によってフィルタされた*後に*実行されます。ユーザーが 'WHEN MATCHED'節に追加のフィルターを持っていた場合、' MERGE TOP(X) 'は常に10行に影響します(更新可能な行が10未満でない限り)。あなたの解は 'WHEN MATCHED'節で除外されたものを除いた10行にのみ影響します。 –