J'ai une donnée stockée dans une colonne xml et j'ai besoin d'une liste de nœuds enfants séparés par des virgules. En utilisant le script ci-dessous, je peux seulement obtenir "A B C". S'il vous plaît aidez-moi à obtenir "A, B, C" en utilisant xquery (Remplacer simplement l'espace par une virgule n'aide pas car nous avons des données avec des espaces à l'intérieur).Récupère les nœuds XML de la colonne SQL Server en tant que liste séparée par des virgules.
create table Temp12345 (col1 xml)
go
insert into Temp12345 (col1)
values('<fd><field i="22"><v>A</v><v>B</v><v>C</v></field></fd>')
go
select col1.value('(/fd/field[@i=22])[1] ', 'NVarchar(Max)')
from Temp12345
go
drop table Temp12345
go
+1 pour une réponse de travail. Par curiosité, je vois que vous utilisez CROSS APPLY. J'ai fait quelque chose de similaire avec un CTE. Y a-t-il un avantage significatif à l'une ou l'autre approche? – IamIC
@IanC: pas sûr - il faudrait voir votre CTE :-) C'est juste comme je sais que je peux "déchiqueter" une liste de nœuds XML dans une "pseudo-table" de ligne, pour en extraire des morceaux individuels . –
@marc pas la même application, mais il interroge le XML de la même manière: avec T AS ( \t \t \t SELECT \t x.node.value ('fn:. Local-name()', « varchar (50) ') AS RankItem, \t \t \t \t \t x.node.value (' (.) », 'float') AS Valeur \t \t \t DE \t @ xml.nodes ('/ data/*') AS x (node) \t \t - select * direct * enfants du noeud 'data' racine \t \t \t \t SELECT \t @OutOfBounds = Count (t.RankItem) \t \t DE \t t INNER JOIN [entier] .RankItems AS ri ON ri.RankItem = t.RankItem \t \t OÙ \t (t.Value ri. [Max]) –
IamIC