您的位置:首页 > 数据库

MSSQL 递归CTE的应用通过子级获取所有对应的父级及其本身(二)

2015-06-09 16:49 573 查看

引言:

还是一样的数据结构(参照:MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)),这次通过CTE实现通过子级节点获取对应的所有父级节点及其本身,本质和通过父级获取子级没有什么不同,只是递归入口改变了而已

代码:

///<summary>
        ///人力资源管理_获取当前选中树节点的所有父Id
        ///</summary>
        ///<param name="CurNodeId">选中的树节点Id</param>
        ///<returns></returns>
        [LogicMethod]
        public string GetParentIdOfCurNode(string CurNodeId)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("With SearchTree as (");
            //获取单位类别Id
            sb.AppendLine("Select PMIS_SysOrganizationTypeId pId");
            sb.AppendLine("From PMIS_SysOrganizationType ");
            sb.AppendLine("Where PMIS_SysOrganizationTypeId='"+CurNodeId+"'" +" Union all ");
            //获取单位id
            sb.AppendLine("Select SysOrganizationId");
            sb.AppendLine("From SysOrganization");
            sb.AppendLine("Where SysOrganizationId='" + CurNodeId + "'"+" Union all ");
            //获取部门Id
            sb.AppendLine("Select SysBusinessUnitId");
            sb.AppendLine("From SysBusinessUnit");
            sb.AppendLine("Where SysBusinessUnitId='"+CurNodeId+"'"+" Union all ");
            //递归单位类别
            sb.AppendLine("Select s.ParentId");
            sb.AppendLine("From PMIS_SysOrganizationType s ");
            sb.AppendLine("join SearchTree st on s.PMIS_SysOrganizationTypeId=st.pId" + " Union all ");
            //递归单位(父亲为类别时)
            sb.AppendLine("Select so.[Type] Pid");
            sb.AppendLine("From SysOrganization so ");
            sb.AppendLine("inner join SearchTree st on so.SysOrganizationId=st.pId"+" Union all");
            //递归单位(父亲为上级单位时)
            sb.AppendLine("Select sor.ParentSysOrganizationId Pid");
            sb.AppendLine("From SysOrganization so ");
            sb.AppendLine("join SysOrgRelation sor on sor.ChildSysOrganizationId=so.SysOrganizationId");
            sb.AppendLine("inner join SearchTree st on  sor.ParentSysOrganizationId=st.pId" + " Union all ");
            //单位递归部门
            sb.AppendLine("Select suo.SysOrganizationId  Pid");
            sb.AppendLine("From SysBusinessUnit sbu ");
            sb.AppendLine("join SysUnitOrg suo on suo.SysBusinessUnitId=sbu.SysBusinessUnitId");
            sb.AppendLine("inner join SearchTree st on  suo.SysBusinessUnitId=st.pId" + " Union all ");
            //部门递归部门
            sb.AppendLine("Select sur.ParentSysUnitId");
            sb.AppendLine("From SysBusinessUnit sbu");
            sb.AppendLine("join SysUnitRelation sur on sur.ChildSysUnitId=sbu.SysBusinessUnitId");
            sb.AppendLine("Inner join SearchTree st on  sur.ChildSysUnitId=st.pId)");
            sb.AppendLine("Select distinct pId from SearchTree Where pId is not null");

            string getAllPId = sb.ToString();
            string allPIds = SysDba.Adapter.ExecuteToJSON(getAllPId);
            return allPIds;
        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: