2012-05-18 7 views
0
CatID parID catName 
1  -1  A 
2  1  B 
3  2  C 
4  3  D 

Je veux écrire une requête qui renvoie la relation parent-enfant dans le format de chaîne.S'il vous plaît aidez-moi avec cette requête de traversée

Dans le tableau ci-dessus, catName a parentId -1, ce qui signifie qu'il n'a pas de parent. B a parentID 1, ce qui signifie que A est son parent.

Ainsi la chaîne est finaly comme celui-ci

A=>B=>c=>D 

Ceci est la façon dont je veux générer une requête.

Je vais transmettre CatID, et il traversera jusqu'à ce qu'il obtienne -1.

+0

utilisent Entity Framework vous? Ou directement ADO.NET? – McGarnagle

+0

directement ADO.net – NoviceToDotNet

Répondre

3
declare @CatID int; 
set @CatID = 4; 

with C as 
(
    select parID, 
     cast(catName as varchar(max)) as catName 
    from YourTable 
    where CatID = @CatID 
    union all 
    select T.parID, 
     T.catName + '=>' + C.catName 
    from YourTable as T 
    inner join C 
     on T.CatID = C.parID 
) 
select catName 
from C 
where parID = -1 

SE-Data

1

En réponse partielle, il semble que vous ayez besoin d'une requête récursive. Here est un thread StackOverflow avec de bonnes informations sur les requêtes récursives. Quant à savoir comment utiliser une requête pour la transformer en une seule chaîne, je ne sais pas ... cette partie peut être plus optimisée pour un langage de programmation.

1

Vous devez définir la fonction, puis l'appeler en boucle récursive.

Vous pouvez utiliser MPTT (Modified Preorder Tree Traversal) pour stocker une arborescence imbriquée ou des données hiérarchiques. Décrire comment obtenir hiérarchique "breadcrumb" dans une seule requête.

Questions connexes