Wednesday, June 27, 2012

Using SQL recursion


This example will generate an employee/manager heirarchy.

DECLARE @employeeId INT
SET @employeeId = 123
WITH emp_hier AS
(
SELECT e.employeeId , e.managerEmployeeId, l.JobLevel as employeeLevel
FROM EmployeeData e
INNER JOIN EmployeeJobLevel l ON l.JobLevel=e.JobLevel
WHERE e.employeeId = @employeeid
UNION ALL
SELECT e2.employeeId , e2.managerEmployeeId, c2.JobLevel as employeeLevel
FROM EmployeeData e2
INNER JOIN EmployeeJobLevel  l2 ON l2.JobLevel=l2.JobLevel
INNER JOIN emp_hier ecte ON ecte.managerEmployeeId= g2.employeeId
WHERE ecte.employeeId <> ISNULL(g2.managerEmployeeId, -1) --This clause prevents maximum recursion error when two employees share each other as their supervisors
)

SELECT *
FROM emp_hier

No comments: