SELECT
OBJECT_NAME(C.OBJECT_ID) AS 'Tabla'
,C.name AS 'Columna'
,SCHEMA_NAME(T.schema_id) AS 'Esquema'
,T.name AS 'Tipo'
,C.max_length AS 'Tamaño Maximo en Bytes'
,C.precision AS 'Precisión'
,C.scale AS 'Escala'
FROM
sys.columns AS C
JOIN
sys.types AS T
ON
C.user_type_id = T.user_type_id
WHERE
OBJECT_NAME(C.OBJECT_ID)='Card'
ORDER BY
C.OBJECT_ID;

SELECT * FROM [Catalogos].[CategoriasGasto];
SELECT
STUFF(
CAST((SELECT
CONCAT(',',MAX(Descripcion))
FROM
[Catalogos].[CategoriasGasto]
GROUP BY
Descripcion
FOR XML PATH('')) AS VARCHAR(8000))
,1
,1
,''
) AS 'Concatenacion';

begin
--Tabla temporal que se crea y llena para simular una tabla de la base de datos.
declare @TablaOrigen table(Id int, Color varchar(10));
insert into @TablaOrigen(Id,Color) values(1,'Azul');
insert into @TablaOrigen(Id,Color) values(2,'Purpura');
insert into @TablaOrigen(Id,Color) values(3,'Negro');
insert into @TablaOrigen(Id,Color) values(4,'Cafe');
insert into @TablaOrigen(Id,Color) values(5,'Violeta');
insert into @TablaOrigen(Id,Color) values(6,'Naranja');
insert into @TablaOrigen(Id,Color) values(7,'Rojo');
insert into @TablaOrigen(Id,Color) values(8,'Verde');
insert into @TablaOrigen(Id,Color) values(9,'Cian');
insert into @TablaOrigen(Id,Color) values(10,'Amarillo');
--Variables utilizadas para la concatenación.
declare @TablaTemporal table(Elemento varchar(10));
declare @TotalElementos int=0;
declare @Elemento varchar(10)='';
declare @Resultado varchar(max)='';
declare @EsPrimerElemento bit=1;
--Se inserta en la tabla temporal '@TablaTemporal' todos los elementos de la tabla origen '@TablaOrigen'.
insert into @TablaTemporal(Elemento) select Color from @TablaOrigen;
--Se asigna a la variable '@TotalElementos' el número total de registros almacenados en la tabla temporal '@TablaTemoral'.
set @TotalElementos= (select count(Elemento) from @TablaTemporal);
--Se recorre la tabla temporal '@TotalElementos' con el fin de ir concatenando cada uno de sus valores en la variable '@Resultado'.
while @TotalElementos > 0
begin
set @Elemento= (select top 1 Elemento from @TablaTemporal);
if(@EsPrimerElemento=1)
begin
set @Resultado= @Elemento;
set @EsPrimerElemento=0;
end
else
begin
set @Resultado= concat(@Resultado,',',@Elemento);
end
delete top(1) from @TablaTemporal;
set @TotalElementos= @TotalElementos - 1;
end
--Se lleva a cabo la selección de la variable '@Resultado' para visualizar el resultado del proceso de la concatenación.
select @Resultado as 'Resultado';
end
Resultado:
