Para hacer esto SQL Server lo permite de forma fácil mediante la utilización de la cláusula FOR XML PATH en el SELECT. En principio la finalidad de esta cláusula es para generar un XML con el resultado de una consulta pero como podréis ver, le podemos encontrar más utilidades.
Incluyo a continuación un ejemplo de consulta en la que en un único campo/registro recupero el historial de cambios realizados sobre la ficha de un producto.
SELECT HIST_CAMBIOS
FROM (SELECT (SELECT CONVERT(VARCHAR(MAX), fecha, 3) +
' - ' +
ISNULL(Name + ' (' + cod_usuario + ')',
cod_usuario) +
' - ' +
ISNULL(Name + ' (' + cod_usuario + ')',
cod_usuario) +
' - Coste anterior: ' +
CAST(ultcos_old AS VARCHAR(MAX)) +
CAST(ultcos_old AS VARCHAR(MAX)) +
' - Coste asignado: ' +
CAST(ultcos_new AS VARCHAR(MAX)) +
CAST(ultcos_new AS VARCHAR(MAX)) +
' - Motivo: ' + motivo + '\\'
FROM pro02e_ultcos_hist_cambios
RIGHT OUTER JOIN dbo.AD_USUARIOS_INYCOM
ON cod_usuario = samAccountName
WHERE emp_pro02e = 'IYC' AND
codalm_pro02e = 'ZA' AND
codpro_pro02e = 'PRODTEST'
ORDER BY fecha DESC
FOR XML PATH('')) AS HIST_CAMBIOS
) TABLA
Y el resultado:
HIST_CAMBIOS
29/07/11 - Usuario (007) - Coste anterior: 2.000 - Coste asignado: 3.000 - Motivo: TEST 3\\29/07/11 - Usuario (007) - Coste anterior: 1.000 - Coste asignado: 2.000 - Motivo: TEST 1\\29/07/11 - Usuario (007) - Coste anterior: 0.00
(1 filas afectadas)
(1 filas afectadas)
No hay comentarios:
Publicar un comentario