SqlServer中遞迴擷取所有上層業務的名稱組合

來源:互聯網
上載者:User

今天在sqlserver中用到了自訂函數,而且是遞迴調用的純量值函式。原因是有一個需求,需要在列表裡面展示出部門的層級關係,看到原來是有一個V_User的視圖,於是採取最簡單的方案,建立一個純量值函式,在視圖中追加一列DeptFullName。用來擷取出部門的所有上層業務名稱。

其自訂函數如下:

CREATE FUNCTION [dbo].[Func_GetDeptName] (-- 當前部門的上層業務ID@deptPid int,-- 當前部門的名稱@deptName varchar(1000),-- 是否取到根部門@isRootName int)RETURNS varchar(1000)ASBEGINdeclare @temp varchar(50)declare @id intset @id = 0select @id=DEPARTMENT_PID,@temp=DEPARTMENT_Name from DEPARTMENT where DEPARTMENT_ID=@deptPidif 0 = @id and 1=@isRootName and 0 <> @deptPidset @deptName = @temp +' > '+ @deptName;else if @id<>0set @deptName =  dbo.Func_GetDeptName(@id,@temp,@isRootName)+' > '+ @deptName-- Return the result of the functionRETURN @deptName;END

考慮到,追加上跟節點公司名稱後,名稱太長的問題。特地在這裡設定了一個參數,作為是否顯示根節點的標誌。

使用如下:

select *,dbo.Func_GetDeptName(DEPARTMENT_PID,DEPARTMENT_NAME,1) as DeptFullName  from DEPARTMENT d

將來擴充一下,也可以將中間的串連符作為參數傳遞。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.