Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement des données hiérarchiques dans SQL Server 2005 ?

Comment puis-je récupérer efficacement des données hiérarchiques dans SQL Server 2005 ?

Susan Sarandon
Libérer: 2024-12-30 14:06:14
original
196 Les gens l'ont consulté

How Can I Efficiently Retrieve Hierarchical Data in SQL Server 2005?

Récupération de données hiérarchiques dans SQL Server 2005

De nombreux développeurs ont du mal à récupérer des données hiérarchiques à partir de SQL Server 2005, en particulier lorsqu'ils traitent des hiérarchies d'objets complexes . Cela est principalement dû à l'absence de clause CONNECT_BY, une fonctionnalité puissante disponible dans les bases de données Oracle pour les requêtes hiérarchiques.

Une approche consiste à créer une table auto-référencée avec une colonne contenant l'ID du parent pour chaque enregistrement enfant. . Une vue peut ensuite être utilisée pour mapper les enfants aux niveaux hiérarchiques. De plus, une requête complexe peut être utilisée pour mettre en relation les parents et les enfants. Bien que cette méthode soit fonctionnelle, elle peut s'avérer lourde et inefficace.

Une solution plus élégante pour les requêtes hiérarchiques dans SQL Server 2005 consiste à exploiter les expressions de table communes (CTE). Les CTE vous permettent de créer des tables temporaires dans une requête, qui peuvent être utilisées pour des structures hiérarchiques complexes.

L'exemple suivant montre comment créer une table hiérarchique et utiliser un CTE pour sélectionner la structure hiérarchique et créer un chemin pour chaque élément :

CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));

INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');

WITH Parent AS
(
    SELECT
        ID,
        ParentID,
        Name AS Path
    FROM
        tblHierarchy
    WHERE
        ParentID IS NULL

    UNION ALL

    SELECT
        TH.ID,
        TH.ParentID,
        CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
    FROM
        tblHierarchy TH
    INNER JOIN
        Parent
    ON
        Parent.ID = TH.ParentID
)
SELECT * FROM Parent
Copier après la connexion

SORTIE :

ID  ParentID    Path
1   NULL        1
2   NULL        2
3   NULL        3
4   1       1/1.1
5   1       1/1.2
6   4       1/1.1/1.1.1
Copier après la connexion

Cette approche fournit une solution plus efficace et plus concise pour récupérer données hiérarchiques dans SQL Server 2005, éliminant ainsi le besoin de requêtes complexes et vous permettant de travailler plus efficacement avec les hiérarchies.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal