度量快速开发平台-专业、快速的软件定制快开平台

标题: SQLserver数据库中关于递归的查询使用 [打印本页]

作者: 王爱东    时间: 2020-3-19 13:32
标题: SQLserver数据库中关于递归的查询使用
度量快速开发平台数据库支持sqlserver数据库,我们之前习惯的oracle递归查询用的 start with dept_id=1000 connect by prior dept_id=upper_id的方式就不灵了。
比如我们的组织机构里面有很多下级机构及部门,要查询出登录人所在的机构,并列出该机构下所有机构和部门。Sqlserver写法如下:

  1. with NewTable as
  2. (
  3. select a.dept_id,a.dept_name,a.upper_id,a.tree_code,a.extend_type,a.DEPT_LEVEL,a.SORT_ORDER from  SA_DEPT_DICT a where a.DEPT_ID=登录用户的部门ID
  4. union all
  5. select b.dept_id,b.dept_name,b.upper_id,b.tree_code,b.extend_type,b.DEPT_LEVEL,b.SORT_ORDER from SA_DEPT_DICT b  inner join NewTable c on b.DEPT_ID=c.UPPER_ID
  6. where b.dept_TYPE=2 or b.DEPT_TYPE=6
  7. )
  8. ,
  9. NewTable1 as
  10. (
  11. select a.dept_id,a.dept_name,a.upper_id,a.tree_code,a.extend_type,a.DEPT_LEVEL,a.SORT_ORDER from  SA_DEPT_DICT a , (select  right(MAX(tree_code),4) dept_ID from NewTable where EXTEND_TYPE='机构' ) c where a.DEPT_ID=c.dept_ID
  12. union all
  13. select b.dept_id,b.dept_name,b.upper_id,b.tree_code,b.extend_type,b.DEPT_LEVEL,b.SORT_ORDER from SA_DEPT_DICT b  inner join NewTable1 c on c.DEPT_ID=b.UPPER_ID
  14. where b.dept_TYPE=2 or b.DEPT_TYPE=6
  15. )
  16. select DEPT_ID,DEPT_NAME,UPPER_ID,SORT_ORDER,EXTEND_TYPE,TREE_CODE from NewTable1
复制代码
请大家学习使用!


作者: 王爱东    时间: 2020-3-19 13:35
这个主要是权限查询需要。比如我是A机构下面的人员,那就只能查看A机构下面的组织机构的数据。不能查看并行的B机构的数据。
作者: 万望    时间: 2020-3-19 14:02
这个语句块霸道( ⊙ o ⊙ )啊!涨姿势了
作者: 张兴康    时间: 2020-3-19 16:08
不错,收藏一个
作者: 张军勇    时间: 2020-3-19 22:54
非常不错,我前两天也写了一个专门测试。早预料到了你们会用。
作者: 张军勇    时间: 2020-3-19 22:55
http://plat.delit.cn/forum.php?m ... &extra=page%3D1
作者: 王爱东    时间: 2020-3-19 22:59
感觉比oracle 麻烦。不过也非常灵活,可以弄很多语句块来实现业务,看起来还是一条sql语句。





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2