は、私は次のSQLパラメータ化CTEのクエリ
select *
from (
select *
from callTableFunction(@paramPrev)
.....< a whole load of other joins, wheres , etc >........
) prevValues
full join
(
select *
from callTableFunction(@paramCurr)
.....< a whole load of other joins, wheres , etc >........
) currValues on prevValues.Field1 = currValues.Field1
....<other joins with the same subselect as the above two with different parameters passed in
where ........
group by ....
次副選択は、クエリバー内のすべての副問い合わせの表関数に@paramに共通するようなクエリを持っています。
select *
from callTableFunction(@param)
.....< a whole load of other joins, wheres , etc >........
私は関数にこれを変換し、関数を呼び出すための一つの選択肢があるが、私はかなり頻繁に 副選択クエリを変更することができる.....または場合、私は疑問に思って、私はこのようにいけません
with sometable(@param1) as
(
select *
from callTableFunction(@param)
.....< a whole load of other joins, wheres , etc >........
)
select
sometable(@paramPrev) prevValues
full join sometable(@currPrev) currValues on prevValues.Field1 = currValues.Field1
where ........
group by ....
のようなCTE を使用して代替がこのまたは私はこのように使用することができる技術のような任意の構文がありますがあります。
これはSQL Server 2008 R2のものです
ありがとうございます。
をまず、何も解決しませんでした。副選択をCTEセクションに移動するだけで、まだコードが重複しています。私がしようとしているのは、(テーブル関数呼び出しで)共通の副選択を使用してクエリ全体を減らすことです。したがって、副選択のロジックを変更したい場合は、1か所で行います。私が今考えることのできる最良の方法は、関数にラップすることですが、私はこのメソッドが気に入らないのです。 – ManiP