Les données organisées de façon hiérarchique sont nombreuses comme par exemple un organigramme d'entreprise ou une règle d'assemblage de pièces. La gestion de telles arborescences avec de simple type entier est plus complexe qu'il n'y paraît et particulièrement l'extraction. SQL Server 2008 propose avec le type hierarchyid toutes les méthodes
Les données hiérarchiques
associées pour manipuler facilement les données organisées de cette façon.
Ce nouveau type de données fait plus qu’apporter le support nécessaire pour extraire les données suivant un ordre hiérarchique. En effet, avec les données de ce type, il est possible de définir des index depthfirst qui permettent d’aboutir le plus rapidement possible au niveau feuille de la hiérarchie et des index breathfirst qui permettent de faire un parcours complet d’un même niveau de la hiérarchie avant d’accéder aux données d’un niveau inférieur.
Associées également au type hierarchyID, des méthodes permettent de connaître le noeud parent (GetAncestor) d’un élément, les noeuds enfants (GetDescendant), d’accéder directement au noeud racine (GetRoot) et bien d’autre encore pour manipuler efficacement les données hiérarchiques.
Dans l’exemple présenté ci-dessous :
create table salaries(
id int identity (1,1),
position hierarchyId,
nom nvarchar(80),
poste nvarchar(80));
go
insert into salaries (position, nom, poste)
values (hierarchyId::GetRoot(), ‘DUPOND’,’chef’);
declare @patron hierarchyid;
select @patron=hierarchyid::GetRoot() from salaries;
declare @drh hierarchyid;
set @drh=@patron.GetDescendant(null, null);
insert into salaries (position, nom, poste)
values (@drh,’BERLODIOT’,’DRH’);
insert into salaries (position, nom, poste)
values (@patron.GetDescendant(@drh, null),’MICHALON’,’Comptable’);
insert into salaries (position, nom, poste)
values (@drh.GetDescendant(null, null),’BERNAUD’,’Assistante’);
select position.ToString(),* from dbo.salaries;
Une table est définie avec une colonne définie sur le type hierarchyid. Pour l’insertion de la racine de la hiérarchie la méthode GetRoot est utilisée. Par la suite les noeuds enfants sont positionnés par rapport à la racine et leur niveau est obtenu par l’intermédiaire de GetDescendant. Il est alors possible de manipuler les données en utilisant les méthodes IsDescendant et GetAncestor. Par exemple, la requête présentée ci-dessous permet d’identifier les descendants directs du chef.
declare @chef hierarchyid;
select @chef=position from salaries where poste=’chef’;
select *
from salaries
where position.GetAncestor(1)=@chef;
Téléchargez cette ressource
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Cyberattaques : 46% des entreprises françaises perdent du chiffre d’affaires dès le premier jour
- Cybersécurité française 2026 : explosion des startups, ralentissement des scale-ups et virage stratégique de l’IA
- Le Cercle de l’Innovation décerne le Prix de l’Innovation du Public 2026
- Avec l’IA agentique, la robustesse des SI redevient stratégique
Articles les + lus
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
À la une de la chaîne Tech
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
