Tengo una información almacenada en una columna xml y necesito una lista de nodos secundarios separados por comas. Usando el script a continuación, solo puedo obtener "A B C". Ayúdame a obtener "A, B, C" usando xquery (el simple reemplazo de espacio con coma no ayuda porque tenemos datos con espacios adentro).Obtener nodos XML de la columna del servidor SQL como lista separada por comas
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 para una respuesta de trabajo. Por curiosidad, veo que estás usando CROSS APPLY. He hecho algo similar con un CTE. ¿Hay alguna ventaja significativa para cualquiera de los enfoques? – IamIC
@IanC: no estoy seguro - tendría que ver su CTE :-) Así es como sé que puedo "triturar" una lista de nodos XML en una "pseudo-tabla" de filas, para tomar partes individuales de ella . –
no @marc la misma aplicación, pero consulta el XML de una manera similar: con T AS ( \t \t \t SELECT \t x.node.value ('fn:.-Nombre local()', 'varchar (50) ') AS RankItem, \t \t \t \t \t x.node.value (' (.)', 'float') como valor de \t \t \t DE \t @ xml.nodes ('/ datos/*') AS x (nodo) \t \t - seleccione * direct * hijos del nodo raíz 'datos' \t \t) \t \t SELECT \t @OutOfBounds = Count (t.RankItem) \t \t DE \t t INNER JOIN [int] .RankItems AS ri EN ri.RankItem = t.RankItem \t \t DONDE \t (t.value ri. [Max]) –
IamIC