que a menudo utilizan consultas como:Concatenación de filas con FOR XML, pero con varias columnas?
SELECT *
FROM ThisTable
OUTER APPLY (SELECT (SELECT SomeField + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField) A
menudo me quiere obtener múltiples campos concatenados concatenados de esta tabla, en lugar de sólo uno. Podría lógicamente hacer esto:
SELECT *
FROM ThisTable
OUTER APPLY (SELECT (SELECT SomeField + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField) A
OUTER APPLY (SELECT (SELECT SomeField2 + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField2) B
OUTER APPLY (SELECT (SELECT SomeField3 + ' ' AS [data()]
FROM SomeTable
WHERE SomeTable.ID = ThisTable.ID
FOR XML PATH ('')) AS ConcatenatedSomeField3) C
Pero parece horrible y propenso a errores cuando algo necesita ser actualizado; también SomeTable es a menudo una larga lista de tablas unidas, por lo que también podría tener implicaciones de rendimiento al obtener las mismas tablas una y otra vez.
¿Hay una mejor manera de hacerlo?
Gracias.
Buena idea, pero el rendimiento no es bueno http://dba.stackexchange.com/q/125771/3690 –