1. 程式人生 > >步步為營-82-獲取當前部門的所有上級節點-存儲過程實現

步步為營-82-獲取當前部門的所有上級節點-存儲過程實現

att csdn tex gun begin xtra res varchar uid

說明:需求部門表自身關聯 表字段OrgUnitGUID(主鍵) OrgUnitName(名稱) UpperOrgUnitGUID(自身關聯)

技術分享

通過存儲過程實現.參考博客http://blog.csdn.net/apollokk/article/details/8330299

現將內容簡畫

1 演練

技術分享
CREATE TABLE [dbo].[department](  
 [ID] [decimal](18, 0) IDENTITY(1,1) NOT NULL,  
 [department] [nvarchar](20) NULL,  
 [pid] [decimal](18, 0) NULL   
)  
創建表
技術分享
CREATE PROCEDURE [dbo].[getChildDeptById]   
 @id INT  
AS  
BEGIN  
 -- SET NOCOUNT ON added to prevent extra result sets from  
 -- interfering with SELECT statements.  
 -- SET NOCOUNT ON;  
  
 WITH   dept  
          AS ( SELECT   *  
               FROM     dbo.department  
               WHERE    pid 
= @id UNION ALL SELECT d.* FROM dbo.department d INNER JOIN dept ON d.pid = dept.id ) SELECT * FROM dept END
根據指定部門的Id獲取所有下級部門 技術分享
CREATE PROCEDURE [dbo].[getParentDeptById]   
 @id INT  
AS  
BEGIN  
 
-- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. -- SET NOCOUNT ON; WITH dept AS ( SELECT dp.* FROM dbo.department d INNER JOIN dbo.department dp ON d.pid=dp.ID WHERE d.id = @id UNION ALL SELECT d.* FROM dbo.department d INNER JOIN dept ON d.id = dept.pid ) SELECT * FROM dept END
根據指定部門的ID創建所有上級部門

2 實戰

技術分享
USE [ZLDC_CostControl]
GO
/****** Object:  StoredProcedure [dbo].[SP_GetParentOrganizationUnitByOrgUnitGUID]    Script Date: 2017/7/1 星期六 15:55:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <yk>
-- Create date: 2017年7月1日15:36:35
-- Description:    根據組織的GUID獲取其所有的上級組織的名稱
--使用場景:根據登錄用戶獲取其所屬機構的名稱 (地產集團/集團總部 運營內控中心/信息管理)
-- =============================================
ALTER PROCEDURE [dbo].[SP_GetParentOrganizationUnitByOrgUnitGUID]   
 @OrgUnitGUID Nvarchar(50)  
AS  
BEGIN  
 -- SET NOCOUNT ON added to prevent extra result sets from  
 -- interfering with SELECT statements.  
 -- SET NOCOUNT ON;   
 WITH   dept  
          AS (   
              SELECT   dp.OrgUnitName ,d.OrgUnitGUID,d.UpperOrgUnitGUID
               FROM     dbo.TB_OrganizationUnit d INNER JOIN dbo.TB_OrganizationUnit dp ON d.UpperOrgUnitGUID=dp.OrgUnitGUID  
               WHERE    d.OrgUnitGUID =@OrgUnitGUID   
               UNION ALL  
               SELECT   d.OrgUnitName ,d.OrgUnitGUID,d.UpperOrgUnitGUID
               FROM     dbo.TB_OrganizationUnit d  
                        INNER JOIN dept ON d.OrgUnitGUID = dept.UpperOrgUnitGUID 
             )  
    SELECT  *  
    FROM    dept   
END 
存儲過程 技術分享
 //經辦人部門的設置
            //獲取所有上級部門 通過存儲過程
            DataSet deptmentDS = TBContractSearch.GetParentOrganizationUnitByOrgUnitGUID(CurrentUser.OrganizationId);
            if (deptmentDS != null && deptmentDS.Tables[0].Rows.Count>0)
            {
                int count = deptmentDS.Tables[0].Rows.Count;
                StringBuilder deptNameSB = new StringBuilder(); 
                for (int i = count-1; i > 0; i--)
                {
                    deptNameSB.Append(deptmentDS.Tables[0].Rows[i]["OrgUnitName"]);
                    deptNameSB.Append(/);
                }
                string deptName = deptNameSB.ToString().TrimEnd(/);
                this.attnDepart.Text = deptName;
C#中調用

3 運行效果

技術分享

步步為營-82-獲取當前部門的所有上級節點-存儲過程實現