CTE

[ WITH <common_table_expression> [ ,n ] ] 
<common_table_expression>::= 
        expression_name [ ( column_name [ ,n ] ) ] 
    AS 
        ( CTE_query_definition )

3.CTE的寫法

with 
cr as 
( 
    select CountryRegionCode from person.CountryRegion where Name like 'C%' 
)

select * from person.StateProvince where CountryRegionCode in (select * from cr)

cr 是一個公用表達式,使用上與表變量相似,只是SQL Server 2005處理公用表達式的方式有所不同。

注意事項

1.需要使用CTE的語句要緊跟著CTE,兩者之間不能有其他東西。否則CTE將會失效。

with
cr as
(
    select CountryRegionCode from person.CountryRegion where Name like 'C%'
)
select * from person.CountryRegion  -- 應將這條SQL語句去掉
-- 使用CTE的SQL語句應緊跟在相關的CTE後面 --
select * from person.StateProvince where CountryRegionCode in (select * from cr)

2.多個CTE可以串起來用,但是只能有一個With。

3.假如CTE的表達式名稱和其他已經存在的table、view同名,緊跟在CTE後面的語句使用的仍是CTE,而再更後面的就是已存在的table、view了。

4.CTE可以引用自身,也可以在同一個With子句中預先定義的CTE,不允許前向引用。

5.不能在 CTE_query_definition 中使用以下子句:

(1)COMPUTE 或 COMPUTE BY

(2)ORDER BY(除非指定了 TOP 子句)

(3)INTO

(4)帶有查詢提示的 OPTION 子句

(5)FOR XML

(6)FOR BROWSE

6.如果將 CTE 用在屬於批處理的一部分的語句中,那麼在它之前的語句必須以分號結尾,如下面的SQL所示:

Brian's範例:

Last updated

Was this helpful?