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
SIEM & PME : Comment construire la boîte noire de votre SI ?
Passez à la cybersécurité proactive, transformez la collecte et l’analyse des logs en un bouclier dynamique contre les cybermenaces. Découvrez comment mettre en place une approche SIEM modulaire, évolutive et accessible, pour anticiper, détecter et réagir efficacement aux attaques.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Les Assises 2026 : encore plus d’énergie pour poursuivre le chemin
- Agents IA : arrêtons de leur confier nos secrets
- Ransomwares : l’extorsion vise désormais les salariés et leurs proches
- Veeam passe à la vitesse supérieure avec iResOps pour Microsoft 365
Articles les + lus
Continuer avec Exchange Server : quelles conséquences ?
Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
Raccourcis PowerShell et Windows Terminal pour les Professionnels IT
Commandes Windows 11 : le Guide des Outils accessibles avec Win + R
Sécurité : une approche dans la durée avant tout
À la une de la chaîne Tech
- Continuer avec Exchange Server : quelles conséquences ?
- Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
- Raccourcis PowerShell et Windows Terminal pour les Professionnels IT
- Commandes Windows 11 : le Guide des Outils accessibles avec Win + R
- Sécurité : une approche dans la durée avant tout
