步步為營-82-獲取當前部門的所有上級節點-存儲過程實現
阿新 • • 發佈:2017-07-01
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獲取所有下級部門= @id UNION ALL SELECT d.* FROM dbo.department d INNER JOIN dept ON d.pid = dept.id ) SELECT * FROM dept END
CREATE PROCEDURE [dbo].[getParentDeptById] @id INT AS BEGIN根據指定部門的ID創建所有上級部門-- 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
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-獲取當前部門的所有上級節點-存儲過程實現