私の仕事は、SQL サーバー (MSSQL2005) を多用する 1 つのアプリケーションを保守することです。
これまで、中間サーバーは TSQL コードを XML に格納し、ストアド プロシージャを使用せずに動的 TSQL クエリを送信していました。
これらの XML クエリを変更できるので、ほとんどのクエリをストアド プロシージャに移行したいと考えています。
質問は次のとおりです。
私のクエリのほとんどは、1 つのテーブルに対して同じ Where 条件を持っています
サンプル:
Select
.....
from ....
where ....
and (a.vrsta_id = @vrsta_id or @vrsta_id = 0)
and (a.podvrsta_id = @podvrsta_id or @podvrsta_id = 0)
and (a.podgrupa_2 = @podgrupa2_id or @podgrupa2_id = 0)
and (
(a.id in (select art_id from osobina_veze where podosobina_id in (select ado from dbo.fn_ado_param_int(@podosobina))
group by art_id
having count(art_id)= @podosobina_count ))
or ('0' = @podosobina)
)
他のテーブルにも同じ場所条件があります。
コードをどのように整理すればよいですか?
適切な方法は何ですか?
すべてのクエリで使用するテーブル値関数を作成する
か、#Temp テーブルを使用して、プロシージャを実行するたびにクエリを単純な内部結合にする必要がありますか? または、テーブル値関数によってファイルされた #temp を使用しますか?
または、すべてのクエリにこの大きな where 句を残して、インデックスが機能することを期待します。
またはWITH(ステートメント)を使用します