générer structuré (xml) document de tableau hiérarchique des données (T-SQL)
J'ai un tableau comme celui-ci (simplifié):
ID | Name | Parent
---------------------------------
1 | IND | NULL
2 | INS | 5
3 | CON | NULL
4 | AUT | 1
5 | FIN | NULL
6 | PHA | 1
7 | CFIN | 5
8 | CMRKT | 7
DDL:
CREATE TABLE [dbo].[tblIndustryCodes](
[IdIndustry] [int] IDENTITY(1,1) NOT NULL,
[IndustryCode] [nvarchar](5) NULL,
[IndustryName] [nvarchar](50) NULL,
[ParentId] [int] NULL,
CONSTRAINT [PK_tblIndustryCodes] PRIMARY KEY CLUSTERED ( [IdIndustry] ASC))
INSERTS:
INSERT INTO [tblIndustryCodes]
([IndustryCode]
,[IndustryName]
,[ParentId])
VALUES
('IND','Industry',NULL),
('PHARM','Pharmacy',1),
('FIN','Finance',NULL),
('CFIN','Corporate Finance',3),
('CMRKT','Capital Markets',4)
Et je voudrais générer un fichier xml à partir de ce qui est structuré selon le parent Id
comme ceci (simplifié)
<IND>
<AUT>
<PHA>
<CON>
<FIN>
<CFIN>
<CMRKT>
Je crois que sa fait peut-être avec un peu certains de récursivité ou quelque chose comme ça, mais je ne sais pas comment. Toute aide est grandement appréciée!
edit: Sa un SQL Server Express 2008
Je ne m'en soucie pas vraiment si c'est du XML valide ou pas, parce que je ne l'utilise que pour remplir un contrôle treeview.
edit2: je serais probablement utiliser "FOR XML EXPLICIT" mais je ne comprends pas vraiment la syntaxe lors de la il n'est pas fixe profondeur maximale de l'arbre.
edit3: pour faciliter la compréhension de la tâche, j'ai ajouté le DDL pour la table
J'ai édité le post original, merci.
terriblement similaire à celui demandé tout à l'heure: stackoverflow.com/questions/2408459/t-sql-question-query-to-xml
ouais, vous êtes en droit, je vous remercie. Je n'ai pas trouvé celui-là. Je suis en train de jouer avec la réponse de ce thread et vais poster mes résultats si j'y arrive.
Vous pouvez le faire avec POUR XML PATH et une fonction récursive. Vérifier ma réponse à la question stackoverflow.com/questions/2408459/t-sql-question-query-to-xml
OriginalL'auteur Michael Niemand | 2010-03-09
Vous devez vous connecter pour publier un commentaire.
Basée sur la Recep de réponse (voir les commentaires), j'ai créé la solution suivante pour résoudre ce problème:
1. Créer une fonction récursive
2. Construire une instruction SELECT, qui appelle la fonction
Cela crée une hiérarchie XML, peu importe la profondeur de l'arbre est:
OriginalL'auteur Michael Niemand
Vous pouvez également le faire sans la création d'une fonction distincte, y compris par la sous-requête comme une colonne supplémentaire qui renvoie les données XML. Par exemple, le suivant sera de retour hiérarchique document XML contenant les utilisateurs et leurs associés liste des rôles:
C'est le meilleur, à la fois souple et très court!
Il n'. Juste essayé moi-même à l'aide de données de vie réelle, des travaux! Pour le vérifier rapide, vous pouvez ajouter des top 5 dans la plus grande SÉLECTION.
OriginalL'auteur Dave