非常に優れた記事 T‑SQL の動的検索条件
があります。 Erland Sommarskogによる。彼は使用できるいくつかのアプローチを説明し、@lad2025 が提案した動的 SQL の構築と OPTION(RECOMPILE)
の使用を比較します。 .
私は個人的に OPTION(RECOMPILE)
を使用しています
これらのクエリで。 SQL Server 2008 を使用しているため、このオプションは適切な選択です。動的 SQL ルートを使用する場合は、彼の別の記事 The Curse and Blessings of Dynamic SQL
.
したがって、手順は次のようになります:
create procedure proc1 @var1 varchar(100) = null, @var2 varchar(100) = null, @var3 varchar(100) = null, @var4 varchar(100) = null, ........ @var10 varchar(100) = null as begin insert into #a select * from ( select * from tab1 as a inner join tab2 as b on a.rollnumber = b.rollnumber inner join tab3 as c on c.city = b.city ........ inner join tab10 as j on J.id = i.id where (a.id = @var1 OR @var1 IS NULL) and (b.id = @var2 OR @var2 IS NULL) and (c.id = @var3 OR @var3 IS NULL) ........... and (J.id = @var10 OR @var10 IS NULL) ) as abc OPTION(RECOMPILE); if (select count(*) from #a) < 10 begin select * from #a end else begin print 'Cannot display the records as count is more than 10' end end
プレ>ところで、
count()
をチェックして何を達成しようとしているのかは明確ではありません 、しかしおそらく必要なのは単純なTOP(10)
だけです 最大 10 行の最初の行を返します。ORDER BY
を必ず追加してくださいTOP
を使用する場合の句 一貫して結果を返します。わからない場合は、プロシージャの別のパラメーターを使用して、返される行の最大数を示し、それをTOP(@ParamMaxRowCount)
で使用できます。 .結果セットを返すこともあれば、メッセージを出力することもあるストアド プロシージャを持つことは一般的ではありません。