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

select必须立即遵循您的 CTE 声明:

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 语句。如果你想在两个单独的语句中使用它,你必须直接在每个语句前面重复声明。

或者,您可以将代码放入真实视图并以这种方式重用。

于 2012-10-24T19:49:07.833 回答