15 sept 2010

Concantenar en Query

s muy frecuente tener que construir un campo que concatener los valores de una columna para varios registros. Una forma clásica de realizar esta acción (es decir, que funciona también para versiones antes de SQL Server 2005) es concatenar en una variable:

declare @Cadena varchar(8000)

select @Cadena = ''

select @Cadena = @Cadena + ',' + COLUMN_NAME

from INFORMATION_SCHEMA.COLUMNS

where TABLE_NAME = 'Tabla1'

ORDER BY ORDINAL_POSITION

select STUFF(@Cadena, 1, 1, '') as CadenaCampos

Desde SQL Server 2005, se puede solventar ese problema en una sóla consulta, haciendo uso de FOR XML PATH, lo que permite una mejor integración en consultas más complejas:

select STUFF(

(SELECT CAST(',' AS varchar(MAX)) + COLUMN_NAME

FROM INFORMATION_SCHEMA.COLUMNS

where TABLE_NAME = 'Tabla1'

ORDER BY ORDINAL_POSITION

FOR XML PATH('')

), 1, 1, '') as CadenaCampos

Un ejemplo de esa integración sería el siguiente:

Select Table_Name, STUFF(

(SELECT CAST(',' AS varchar(MAX)) + C.COLUMN_NAME

FROM INFORMATION_SCHEMA.COLUMNS C

where C.TABLE_NAME = T.TABLE_NAME

ORDER BY ORDINAL_POSITION

FOR XML PATH('')

), 1, 1, '') as CadenaCampos

from INFORMATION_SCHEMA.TABLES T

En esta línea se pueden hacer otras cosas más elaboradas, como por ejemplo, construir una sentencia pivot dinámica:

http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/thread/d5544169-7068-4796-88ce-b6eafd0f0b8e



fuente: http://qwalgrande.blogspot.es

No hay comentarios:

SSIS - Package en blanco

Como solucionarlo: 1. Renombrar Package 2. Guardar package 3. Cerrar Solución.