Dit kan in SQL Server 2005 en hoger worden gedaan met behulp van Common Table Expressions (CTE's). Hier is een geweldige link van MSDN die recursieve zoekopdrachten beschrijft:Recursieve zoekopdrachten met behulp van algemene tabeluitdrukkingen
Hier is een voorbeeld:
Als u zich een hiërarchische lijn van mensen voorstelt, kunt u met deze query de volledige lijn van een persoon zien EN hun plaats in de hiërarchie berekenen. Het kan worden aangepast om elke onderliggende relatie te vinden.
In plaats van de ID van de persoon, verwissel je de ID van de rij die je als ouder gebruikt.
--Create table of dummy data
create table #person (
personID integer IDENTITY(1,1) NOT NULL,
name varchar(255) not null,
dob date,
father integer
);
INSERT INTO #person(name,dob,father)Values('Pops','1900/1/1',NULL);
INSERT INTO #person(name,dob,father)Values('Grandma','1903/2/4',null);
INSERT INTO #person(name,dob,father)Values('Dad','1925/4/2',1);
INSERT INTO #person(name,dob,father)Values('Uncle Kev','1927/3/3',1);
INSERT INTO #person(name,dob,father)Values('Cuz Dave','1953/7/8',4);
INSERT INTO #person(name,dob,father)Values('Billy','1954/8/1',3);
DECLARE @OldestPerson INT;
SET @OldestPerson = 1; -- Set this value to the ID of the oldest person in the family
WITH PersonHierarchy (personID,Name,dob,father, HierarchyLevel) AS
(
SELECT
personID
,Name
,dob
,father,
1 as HierarchyLevel
FROM #person
WHERE personID = @OldestPerson
UNION ALL
SELECT
e.personID,
e.Name,
e.dob,
e.father,
eh.HierarchyLevel + 1 AS HierarchyLevel
FROM #person e
INNER JOIN PersonHierarchy eh ON
e.father = eh.personID
)
SELECT *
FROM PersonHierarchy
ORDER BY HierarchyLevel, father;
DROP TABLE #person;