1

次のSQL(SQL Server 2008)ステートメントについて考えてみます。

WITH MyResult AS
(
  SELECT 
    Name,
    Row_ID AS ORD
  FROM Person Where Gender = @Gender
)
SELECT *
FROM MyResult
WHERE ORD > 5

MyResultはtempdbの一時テーブルに保存されていますか?それとも何か他のことをしますか?

いくつかのクエリを最適化しており、パフォーマンスなどを測定するために、WITHステートメントを(内部的に)よりよく理解する必要があります。

ありがとう

4

1 に答える 1

2

いいえ、このMSDNの記事によると

... CTEは言語レベルの構造です。つまり、SQLServerは一時テーブルまたは仮想テーブルを内部的に作成しません。

そしてまた、ここで述べたように

共通テーブル式(CTE)は、単一のSELECT、INSERT、UPDATE、DELETE、またはCREATEVIEWステートメントの実行スコープ内で定義される一時的な結果セットと考えることができます。CTEは、オブジェクトとして保存されず、クエリの期間中のみ存続するという点で、派生テーブルに似ています。

于 2010-06-24T09:08:35.187 に答える