1

私は自分のビジネス ロジックに基づいて以下のようなスクリプトを書いています。CTE (共通テーブル式) を実装する方法を教えてください。

IF OBJECT_ID('tempdb..#tmpFirstTable') IS NOT NULL
DROP TABLE #tmpFirstTable

;WITH tempCTE AS ( select * from Table1  )      

IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL
DROP TABLE #tmpTable
SELECT  * 
into #tmpTable
from table2  

Select * from tempCTE T1,#tmpTable T2 , #tmpFirstTable T3 where T1.ID = T2.ID and T2.ID = T3.ID

上記のコード形式はそのままである必要があります。

私が得ている エラーはです。

キーワード「IF」付近の構文が正しくありません。

4

3 に答える 3

2

CTEselect宣言にすぐに従う必要があります。

IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL
DROP TABLE #tmpTable
SELECT  * 
into #tmpTable
from table2  

;WITH tempCTE AS ( select * from Table1  )      
Select * from tempCTE T1,#tmpTable T2 where T1.ID = T2.ID

ドキュメントから:

CTEの後には、一部またはすべてのCTE列を参照する単一のSELECT、INSERT、UPDATE、またはDELETEステートメントが続く必要があります。

また、明示的な結合構文を使用することがはるかに一般的になっています。

Select * from tempCTE T1 join #tmpTable T2 on T1.ID = T2.ID
于 2012-10-24T19:03:07.720 に答える
1
IF OBJECT_ID('tempdb..#tmpTable') IS NOT NULL
DROP TABLE #tmpTable
SELECT  * 
into #tmpTable
from table2  

;WITH tempCTE AS ( select * from Table1  )      
Select * from tempCTE T1,#tmpTable T2 where T1.ID = T2.ID
于 2012-10-24T19:03:32.533 に答える
0

CTE はビューに相当します。ただし、対象は単一の SELECT、INSERT、UPDATE、DELETE、または MERGE ステートメントのみです。2 つの別々のステートメントで使用する場合は、それぞれのステートメントの直前で宣言を繰り返す必要があります。

または、コードを実際のビューに配置して、そのように再利用することもできます。

于 2012-10-24T19:49:07.833 に答える