It is recursing properly but only down the first branch. So the first call returns 33,37,42,76. It is recursing down the 33 branch but it doesn't come back up and go down the 37, 42, and 76 branch...ALTER PROCEDURE [dbo].[BuildDepartmentList] -- Add the parameters for the stored procedure here @ClientID int, @ParentID int, @Depth int = 0, @SortOrder int = 1ASBEGIN --SET NOCOUNT ON; DECLARE @DepartmentID int DECLARE @NextDepth int DECLARE @MyCursor CURSOR IF @ParentID = -1 BEGIN print 'one' SET @MyCursor = CURSOR FAST_FORWARD FOR SELECT DepartmentID FROM Departments WHERE ClientID = @ClientID AND ParentDeptID = 0 ORDER BY DepartmentName ASC END ELSE BEGIN print 'two' print @ParentID SET @MyCursor = CURSOR FAST_FORWARD FOR SELECT DepartmentID FROM Departments WHERE ClientID = @ClientID AND ParentDeptID = @ParentID ORDER BY DepartmentName ASC END OPEN @MyCursor FETCH NEXT FROM @MyCursor INTO @DepartmentID WHILE @@FETCH_STATUS = 0 BEGIN print 'three' print @DepartmentID SET @SortOrder = @SortOrder + 1 UPDATE DEPARTMENTS SET DEPTH = @Depth, SORTORDER = @SortOrder WHERE DepartmentID = @DepartmentID SET @NextDepth = @Depth + 1 EXEC BuildDepartmentList @ClientID, @DepartmentID, @NextDepth, @SortOrder ENDEND