CTE的SQL语句里,可以使用普通的SQL语句使用的命令。
如:INNER JOIN, LEFT JOIN, UNION 等等语句都可以在CTE里使用。
With Test_CTE
AS
(
Select InvoiceId from Table1
Union
Select InvoiceId from Table2
)
Select * From Test_CTE
在CTE里,也可以使用Top, Sum, Count等语句
但是, CTE也有使用现在的。如:ORDER BY (没有TOP语句的),INTO等语句不能在里面使用。
With Test_CTE
AS
(
Select Count(*) As TotalCount from Table1
)
Select * From Test_CTE
Coun(*) As TotalCount的TotalCount是一定比要的。不然这个临时的数据集的字段会找不到。
CTE的定义还可以是自定义字段:
With Test_CTE (InvoiceId)
AS
(
Select InvoiceId from Table1
Union
Select InvoiceId from Table2
)
Select * From Test_CTE
但是这种写法不是很好用。因为字段的定义是可选的,所以一般都是使用从Select里继承的字段名字。
CTE的有效范围只在同一语句。
With Test_CTE
AS
(
Select InvoiceId from Table1
Union
Select InvoiceId from Table2
)
Select * From Test_CTE
--这句会出错的。
Select * From Test_CTE