Tema: sql dinamico
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/03/2010, 09:14
javiiperez
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
sql dinamico

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!!!!