Je tente de créer une vue SQL qui renverra une valeur concaténée des sous-chaînes à partir d'une colonne dans une table.Retour des sous-chaînes concaténées de la colonne dans SQL
Dans mon exemple, il y a une colonne intitulée 'DefDetails' dans une table nommée 'TrebuchetSettings', qui contient une liste XML de valeurs que j'ai besoin de concaténer ensemble.
La colonne DefDetails tiendra une valeur comme celui ci-dessous, par enregistrement:
<Trebuchet> <FolderSetDef ID="9365da81288308c9c57aba483f83d2469a5da9ecba" Name="ReportDef" Version="1.0" SubType="" Scope="Global" Culture="Invariant" View="(None)"> <Alias /> <Description /> <Owner>934ec7a1701c451ce57f2c43bfbbe2e46fe4843f81</Owner> <FolderList> <FolderDef ID="93af31dc1b3238241be33549ba8f8239b377767680" Name="Yearly Reports" ParentID="93af31a36cf8232f44265b40f9a1cd14d1e7000813" Scope="Core" /> <FolderDef ID="93af31a36cf8232f44265b40f9a1cd14d1e7000813" Name="CSM Management Reports" ParentID="Root" Scope="Core" /> </FolderList> </FolderSetDef> </Trebuchet>
l'aide d'une instruction SQL, je dois interroger la table TrebuchetSettings et retourner une liste concaténée du « Nom » champs dans les noeuds 'FolderDef' dans le XML ci-dessus, séparés par un caractère '/', avec FolderDef dont les ID correspondent à un ParentID des FolderDef suivants listés au début de la chaîne, de sorte que la structure concaténée représente une structure de dossier.
Comme il existe d'autres types d'enregistrements dans cette table, ma requête se compose actuellement de ce qui suit, pour identifier les documents que je dois tirer ces sous-chaînes de:
SELECT *
FROM TrebuchetSettings
WHERE DefType = 'FolderSetDef'
AND DefDetails LIKE '%(Folder ID)%'
Dans l'exemple SQL ci-dessus, le dossier ID est un ID de 42 caractères qui sera comparé à une valeur d'une autre table pour correspondre à l'ID de l'un des dossiers Defs dans le XML.
Malheureusement, je n'ai pas de jeu de code de départ pour cela, car je n'ai pas l'expérience de travailler avec des sous-chaînes d'une colonne en SQL et je ne sais pas par où commencer.
Je vous suggère de déplacer/copier 'valeur NAME' dans une colonne séparée et définir une colonne de drapeau pour les lignes où' DefDetails LIKE « % (ID de dossier)% ''. Sinon, ce sera une opération très lente. SQL n'est pas le meilleur outil pour travailler avec XML. –