公用表表达式(Common Table Expression)是SQL SERVER 中的一个特性.CTE可以看作是一个临时的结果集,可以在接下来的一个SELECT,INSERT,UPDATE,DELETE,MERGE语句中被多次引用。使用公用表达式可以让语句更加清晰简练.
按照是否递归,可以将公用表(CTE)表达式分为递归公用表表达式和非递归公用表表达式.
with as 的递归用法
with cte_child(deptid,pdeptid,deptname,level)
as
(
select
CAST(-1 as decimal(19)) as deptid,
CAST( 0 as decimal(19)) as pdeptid,
CAST( '董事会' as varchar(100)) as deptname,
0 as level
union all
select
d.deptid,
d.pdeptid ,
d.deptname,
b.level+1
from pcmc_dept d
-- 从上往下递归,递归部分不允许使用外部联接(不允许使用left join等)
inner join cte_child b on ( d.pdeptid=b.deptid)
-- inner join cte_child b on ( b.pdeptid=d.deptid) 从下往上递归
where d.DISABLE=0
)
select
deptid deptId,
pdeptid pdeptId,
deptname deptName,
level
from cte_child -- CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。