Have a look to this code and see whether it solves your problem, CREATE TABLE TempTree (Id int IDENTITY, Id_Project VARCHAR(100), Id_Parent VARCHAR(100)) INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Root','Root') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 1 1', 'Root') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 1 2', 'Root') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 1 3', 'Root') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 2 1', 'Level - 1 1') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 2 2', 'Level - 1 1') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 2 3', 'Level - 1 2') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 2 4', 'Level - 1 2') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 2 5', 'Level - 1 3') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 2 6', 'Level - 1 3') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 1', 'Level - 2 1') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 2', 'Level - 2 1') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 3', 'Level - 2 2') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 4', 'Level - 2 2') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 5', 'Level - 2 3') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 6', 'Level - 2 3') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 7', 'Level - 2 4') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 8', 'Level - 2 4') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 9', 'Level - 2 5') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 10', 'Level - 2 5') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 11', 'Level - 2 6') INSERT INTO TempTree (Id_Project, Id_Parent) VALUES ('Level - 3 12', 'Level - 2 6') CREATE PROC Dbo.Proc_TheTree (@parent VARCHAR(100)) AS CREATE TABLE #TheList (RootId int, RootName VARCHAR(100), ChildName VARCHAR(100)) CREATE TABLE #TheSearch (SLNO INT IDENTITY, ParentName VARCHAR(100), IsSearchCompleted BIT) IF NOT EXISTS (SELECT * FROM TempTree WHERE id_parent = @parent) BEGIN SELECT * FROM TempTree WHERE id_project = @parent END ELSE BEGIN INSERT INTO #TheSearch (ParentName, IsSearchCompleted) SELECT id_project, 0 FROM TempTree WHERE id_parent = @parent INSERT INTO #TheList (RootId, RootName, ChildName) SELECT (SELECT Id FROM Temp