T-SQL estoy haciendo un procedimiento en el cual utilizo una variable para obtener información

Mi problema es que quiero moverme a través de las columnas de mi tabla para obtener los registros de estas pero al parecer lo estoy haciendo mal

declare @column nvarchar(7);
declare @IdConc int;
declare @Contador int;
set @Contador = 0;
while @Contador < 2
begin
set @column = 'IdConc'+cast(@Contador as varchar);
set @IdConc = (select @column from DatosProyec);   --(en esta línea es en la que tengo el problema)
set @Contador = @Contador + 1;
print 'valor :' +cast(@IdConc as varchar);
end

1 Respuesta

Respuesta
1

Debes utilizar una variable de tipo tabla para almacenar las filas devueltas por la instrucción select.

soy novato en esto de procedimientos podrías regalarme un ejemplo para utilizar la variable de tipo tabla

Te paso un ejemplo con la base de datos pubs:

DECLARE @cantlibros_x_categoria TABLE (categoría CHAR(12),

                                                                            cantidad  INT);

INSERT INTO @cantlibros_x_categoria

SELECT type, COUNT(*) FROM titles GROUP BY type;

SELECT * FROM @cantlibros_x_categoria;

GO

¡Gracias! te lo agradezco infinitamente

Perdón que te vuelva molestar pero realiza la consulta con el dato tipo tabla y me da el mismo resultado quizá no plante bien mi pregunta te doy mas información para se mas claro 

mira 

Tengo  una variable la cual estoy manejando como NVARCHAR(@column), esta variable quiero que sea el nombre de una columna de una tabla esta tabla tiene columnas llamadas (IdConc0, IdConc1, IdConc2, …. Asta 37) estos datos quiero almacenarlos en la variable antes mencionada la cual le asigno el nombre y le cambio el numero en una sentencia WHILE de esta forma (set @column = 'IdConc'+ cast(@Contador as varchar)):

Mi problema esta cuando hago el SELECT para extraer el valor de la columna, este valor lo quiero guardar en otra variable de tipo INT(@IdConc) se supone que el valor que me debe de arrojar es un numero (select @IdConc = @column from DatosProyec;) pero no me arroja el valor numérico me arroja el contenido de la variable ((@column) que es el nombre de la columna (IdConc0 ‘o IdConc1 según el número que le corresponda del WHILE) por lo cual me arroja un error este error lo entiendo ya que estoy tratando de meter un data de tipo NVARCHAR(@column(IdConc0)) a un tipo INT(@IdConc) pero se supone que en el SELECT me debe de dar un numero pero no es así y como sé que es lo que me da la variable porque cuando cambio la variable @IdConc de tip INT a NVARCHAR lo que arroja es lo que les mencione (IdConc0, IdConc1, IdConc2, ….) que es el valor de la variable de la columna @column

Espero no los haya revuelto y les muestro mi código de cómo lo tengo:

declare @column nvarchar(7);

declare @IdConc int;

declare @Contador int;

set @Contador = 0;

while  @Contador < 2

      begin      

            set @column = 'IdConc'+ cast(@Contador as varchar);

            select @IdConc = @column from DatosProyec;

            set @Contador = @Contador + 1;

            print @column;

            print cast(@IdConc as varchar);         

      end

Espero me puedas ayudar y de antemano muchas gracias


Ahora entendí, deberías usar una instrucción SQL dinámica, usando el comando sp_executesql.

Te paso un ejemplo:

DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)
DECLARE @IntVariable INT
DECLARE @Lastlname varchar(30)
SET @SQLString = N'SELECT @LastlnameOUT = max(lname)
                   FROM pubs.dbo.employee WHERE job_lvl = @level'
SET @ParmDefinition = N'@level tinyint,
                        @LastlnameOUT varchar(30) OUTPUT'
SET @IntVariable = 35
EXECUTE sp_executesql
@SQLString,
@ParmDefinition,
@level = @IntVariable,
@LastlnameOUT=@Lastlname OUTPUT
SELECT @Lastlname
				

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas