結果セットを小さなサイズに制限するかどうかを決定するフラグがあります。クエリ自体は膨大で、保守がひどいので、コピー/貼り付けはしたくありません。何が最善の方法ですか?私は私が遊んだいくつかの選択肢を持っているが、彼らは私にはハックっぽいのようだ:SQL ServerのTOP(@x)または単に "all"行を選択する方法(SET ROWCOUNTなし)
可能性#1
SELECT TOP (
CASE WHEN @flag = 1 THEN @limit ELSE @someHugeNumber END
) (...)
FROM (...) hugeQuery;
可能性#2
DECLARE @rc INT = CASE WHEN @flag = 1 THEN @limit ELSE 0 END;
SET ROWCOUNT @rc;
SELECT (...) FROM (...) hugeQuery;
がありますより良い方法ですか?パフォーマンスはどうですか?ヘルプは高く評価しました!
TOPのcase式で何が問題になっていますか?私はここでROWCOUNTを使用するファンではありません。なぜなら、必要なときに2つのステートメントを使用することを意味するからです。 –
ほとんどの場合、私は最大値を定義したくないです。その事件が実際に「すべてを」と意味することを意味し、効果的に私は何十億という言葉を要求しているだけでは、あまり読みにくくない。それは私のにおいがする。 – Dave
'set rowcount'を使用すると、クエリ内で実行されるすべてのステートメント(ストアドプロシージャ呼び出し、ビュー、トリガなど)に適用されます。本当にそれが欲しいですか?あなたの言われたように、「トップ(n)」が間違っていて、読みやすさは主観的です。 – ajeh