SQL Server查询通过with as给有父子关系的数据返回结果加上层级字段和值

从SQL Server数据库中查询一张有父子关系表的数据时候,我们可能需要知道每一条数据的层级,这个需求当然可以先将数据查出来后再在程序中通过递归获得,不过SQL Server数据库可以通过with as直接获得每一条数据的层级值,并且通过一个自定义字段返回。

1、如图,我们查询下面的地区表数据时候,同时取得其层级

SQL Server查询通过with as给有父子关系的数据返回结果加上层级字段和值_第1张图片
image.png

2、实现代码

WITH tree AS (
   SELECT
       name,
       code,
       parent_code,
       lev = 0 -- 定义层级字段,并且设置顶级的值
   FROM
       weker_region
   WHERE
       name = '浙江省' -- 顶级数据条件,比如此处设置条件为浙江省,那么只查询浙江省及其下属各级别所有的地区
   UNION ALL
       SELECT
           b.name,
           b.code,
           b.parent_code,
           lev = tree.lev + 1 -- 递归中每下去一级层级就+1
       FROM
           tree
       INNER JOIN weker_region b ON tree.code = b.parent_code
) SELECT
   *
FROM
   tree
ORDER BY
   tree.lev
OPTION (MAXRECURSION 0); -- 该处设置最大递归次数,默认是100,设置为0则递归次数不限

3、执行结果如图


SQL Server查询通过with as给有父子关系的数据返回结果加上层级字段和值_第2张图片
image.png

4、需要注意的是,如果数据量特别大,执行时间会特别长,如只查询浙江省及其下属各级地区,大概零点几秒左右,但是查询中国下属三千多各级地区的话,反正几百秒秒都还没有跑完。

参考文章:
1、SQL中的with as的使用
2、语句被终止。完成执行语句前已用完最大递归 100

你可能感兴趣的:(SQL Server查询通过with as给有父子关系的数据返回结果加上层级字段和值)