Hola gente, tengo una consulta, estoy tratando de armar una consulta q me levante de una tabla los nombres de las columnas q tenga, pero no se cuantas puede llegar a tener. La idea es verticalizar la tabla. El problema q tengo es q me dice q tengo q declarar la variable q uso en el select interno. lo probe sin sql dinamico y me hace exactamente lo mismo. Alguien sabe que puede ser?
Aca les copio el codigo, no es muy prolijo, soy nuevo en este lenguaje y me falta aprender.
La talba "mensajes" tiene como columnas las siguientes
mes, p_orig, dest, n_int, item y muchas columnas llamadas mensaje# que no se cuantas son, en si se, pero quiero hacer un query generico q sin importar la cantidad de columnas me ande la consulta.
La onda es volcar esa tabla a una q tenga la siguiente forma
mes, p_orig, dest, n_int, item (una fila x cada columna de mensaje) y mensaje
DECLARE @sql nvarchar(500);
DECLARE @nom_men nvarchar(50);
DECLARE nom_men_cursor CURSOR FOR
SELECT name
FROM syscolumns
WHERE NAME LIKE '%mensaje%';
OPEN nom_men_cursor;
FETCH NEXT FROM nom_men_cursor
INTO @nom_men;
set @sql= '
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT m.mes, m.p_orig, m.dest, m.n_int, m.item, [dbo].[' + @nom_men + ']
FROM mensajes m
FETCH NEXT FROM nom_men_cursor INTO @nom_men
END';
exec(@sql);
el error q me tira es el siguiente
Mens. 137, Nivel 15, Estado 2, Línea 10
Debe declarar la variable escalar "@nom_men".
Mens. 137, Nivel 15, Estado 2, Línea 16
Debe declarar la variable escalar "@nom_men".
Muchas gracias!!!!