2011. 11. 21. 14:16
반응형


CREATE FUNCTION [dbo].[GET_DEPT_LIST](@p_dept_id VARCHAR(40))
RETURNS @deptList TABLE
(
  dept_id varchar(20),
  dept_name varchar(100),
  dept_level int
)
AS
BEGIN
 DECLARE @deptId   VARCHAR(20)
 DECLARE @deptName   VARCHAR(100)
 DECLARE @deptLevel   int

 DECLARE C_LIST CURSOR
    FOR
    with dept_list(dept_id, dept_name, dept_level) as (
   select dept_id, dept_name, 0 as dept_level
   from department
   where dept_id=@p_dept_id
   union all
   select a.dept_id, a.dept_name, b.dept_level+1
   from department as a
     join
     dept_list b
   on a.parent_dept_id=b.dept_id
  )
  select dept_id, dept_name, dept_level from dept_list

  OPEN C_LIST   -- cursor open
        FETCH NEXT FROM C_LIST INTO @deptId, @deptName, @deptLevel

        WHILE @@FETCH_STATUS = 0
        BEGIN
   insert @deptList values(@deptId, @deptName, @deptLevel)
           
            FETCH NEXT FROM C_LIST INTO @deptId, @deptName, @deptLevel
        END

   CLOSE C_LIST
    DEALLOCATE C_LIST
 
 return
END

반응형

'Db > Mssql' 카테고리의 다른 글

mssql과 oracle 함수 비교  (1) 2011.10.28
mssql function sample  (1) 2011.10.28
mssql procedure while, if sample  (3) 2011.10.28
MSSQL Getdate 날짜포멧  (2) 2011.10.18
mssql 세로 데이터를 가로로 표현, split 기능 함수  (2) 2011.10.18
Posted by seongsland