基本写法
WITH expression_name[(column_name [,...])]
AS
(CTE_definition)
SQL_statement;
定义多个CTE写法
WITH cte_1[(column_name [,...])]
AS
(cte_1_definition),
cte_2
(cte_2_definition),
cte_2
(cte_3_definition),
SQL_statement;
语法:
1、公用表表达式的名字(在WITH之后),提供后续调用,有且只能调用一次
2、所涉及的列名(可选)
3、 一个SELECT语句(紧跟AS之后)
4、With之前如果有SQL语句,需要用分号隔开(;)
非递归用法
目的:可以在接下来一条语句中多次引用:
用法:非递归公用表表达式(CTE)的使用方式和视图以及子查询一致
with cte AS(SELECT * FROM T_SomeTable) select * from cte a inner join cte b on a.SomeColumn= b.SomeColumn
递归用法
(基本语句、递归语句)
With recursive_CTE AS ( SELECT p1.* FROM T_SomeTable p1 where p1.SomeColumn = 'XXXXX' --递归初始条码 UNION ALL SELECT p2.* FROM T_SomeTable p2 INNER JOIN recursive_CTE on recursive_CTE.SomeColumn = p2.SomeColumn -- 递归条码 ) Select * From recursive_CTE --执行表达式,获取值 |
限制递归次数
Select * From recursive_CTE
OPTION ( MAXRECURSION 2) — 限制最大递归次数为2