with a as (select * from test)
select * from a;
其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它
这样对于大批量的SQL语句起到一个优化的作用,而且清楚明了
也可以再需要递归的时候调用他 例如TreeView绑树的时候
;WITH SitesTree(Id,SiteKey,Name,ParentID,IsLocked)
AS
(
select Id,SiteKey,Name,ParentID,IsLocked from dbo.Navigation_SitesTree
WHERE ParentID = 0
UNION ALL
SELECT H.Id,H.SiteKey,H.Name,H.ParentID,H.IsLocked FROM dbo.Navigation_SitesTree H
INNER JOIN SitesTree V ON H.ParentID = V.Id
)
select a.Id,a.SiteKey,a.Name,a.ParentID,a.IsLocked,b.Type from SitesTree a inner join
dbo.Traffic_Sites b on a.SiteKey=b.SiteKey
order by a.ParentID,b.[Type],a.Id