2012-01-24 18 views
2

私は、同じクエリを他の計算への入力としてクエリ全体の中で何度も繰り返すことを必要とするSQLクエリを持っています。重複を避けるためにSQL Serverクエリを2回書くのを避けるにはどうすればよいですか?

SELECT SQL文を1回だけ定義するようにクエリを書く方法はありますか?それがクエリを通して繰り返されるときに間違いを避けるためにこれを行う方法はありますか?ケース

CTEとテーブル変数の他の20%のデータがSELECTから戻され、この場合に は、症例の80%において< 100行であると予想され、100〜200行の最大:

UPDATEどちらも有効な回答のように見えますが、いずれの状況でどれが適切な選択肢であるかをどのように知っていますか?

+0

CTEを検索します。 –

+0

@ypercube - 'CTE'は1つのクエリに対してしかないので、ここではうまく適合しません。いったん私が 'SELECT * FROM CTE'になったら、目的を破るCTEを再定義しないかぎり、次のクエリはそれを見ることができません。 – JNK

+0

@JNK:この場合、ビューは便利かもしれません。 OPは、同じクエリで同じSELECTを複数回使用したいと思っていました。 –

答えて

3

あなたは、サブクエリと同じクエリで複数回同じSELECTを再利用したい場合は、Common Table Expressions (CTE)を使用することができます。

7

selectを使用して、Tempテーブルまたはテーブル変数に挿入します。 (データセットが小さくなると思われる場合はテーブル変数を使用し、大きければテンポラリテーブルを使用してください)。それ以降のすべてのクエリで、他のテーブルと同じように一時テーブルまたはテーブル変数に参加します。

+1

その他の考慮事項 - 一時表には索引を付けることができ、制約を持つことができます。テンポラリテーブルは、内部スコープでも表示され、テーブル変数は直接スコープでのみ表示されます。 – JNK

+0

テーブル変数は、tempdbロックと並行性の問題の可能性が低くなります。それは必ずしも明確な選択肢ではありません。 – mwigdahl

関連する問題