我々はいくつかのparamsをここから大っぽいクエリを持っており、それぞれ1のために、クエリがだけなので同様に、where
句の一部によって異なりますTSQLで動的条件付き検索を実行する方がいいですか?
CASE WHEN @IncludeNames = 1 AND @NameFilter IS NULL THEN
(SELECT blah FROM blahBlah
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE blahBlah.Id = x.Id)
WHEN @IncludeNames = 1 AND @NameFilter IS NOT NULL THEN
(SELECT blah FROM blahBlah
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
WHERE blahBlah.Id = x.Id
AND table2.Id = @NameFilter
これは、いくつかのインスタンスでは、where句の条件が1つだけ異なるだけです。
これは大きな選択の途中です。ここに示されているよう
一つの大きな連結SQL文字列にそれをすべてを配置し、その上でexec
を実行している、またはブロックごとに複数格納されてprocsのような不条理なものを使用せずに、これをクリーンアップする良い方法は、あります:http://www.developerfusion.com/article/7305/dynamic-search-conditions-in-tsql/7/
サーバーはSQL Server 2008 R2です。 TIA!
'@IncludeNames = 0'をチェックすることはありませんか?その場合はどうなりますか? –
http://www.sommarskog.se/dyn-search-2008.html –
一度に複数のフィルタを適用できるようにすることは意図していますか?名前と靴サイズで? – HABO