2012-03-16 15 views
2

今日、T-SQL、SQL-Server-2008でいくつかのクエリを実行していて、私が理解していない奇妙なことに遭遇しました。クエリウィンドウを使用して、私は(私は私が何をしていたか、それがより明確にするために多くのコードを取り除か)そうのような2つの共通テーブル式から照会しようとしています:複数の共通テーブル式(WITH)から複数回クエリできない

;WITH temp1 AS (SELECT * FROM dbo.Log) 
, temp2 AS (SELECT * FROM dbo.SignalCodeItems300_tbl) 

SELECT * FROM temp1 
SELECT * FROM temp2 

しかし、選択の一つだけ最初の文が実行されます。どちらに関係なく、最初の実行のみ。私はこれが何らかの構文のものだと思っています。エラー "無効なオブジェクト名 'temp2'が表示されます。

誰かがこの問題を解明できますか?このための回避策はありますか?

答えて

1

いいえ、これは正常に動作します。 CTE(Common Table Expression)は、定義の後の最初のステートメントでのみ使用できます。つまり、select * from temp1以降は、両方とも使用できなくなります。

修正は、これを次のようになります。

;WITH temp1 AS (SELECT * FROM dbo.Log) 
SELECT * FROM temp1 

;WITH temp2 AS (SELECT * FROM dbo.SignalCodeItems300_tbl) 
SELECT * FROM temp2 
1

あなたはMSDN documentationを見てみることをお勧めします。特に

Multiple CTE query definitions can be defined in a nonrecursive CTE. 
The definitions must be combined by one of these set operators: 
UNION ALL, UNION, INTERSECT, or EXCEPT. 

これは本質的に1つのクエリとして実行されてあなたは、しかし二つの異なるスキーマをミックスして一致させることはできません。

0

明示的に繰り返したくない場合は、ビューまたはユーザー定義のテーブル値関数を使用してクエリを格納します。

関連する問題