Insertar SQL con un nombre de columna dinámico

Insertar SQL con un nombre de columna dinámico

Tengo una tabla temporal que tiene todos los nombres de la columna, por ahora hay 4 de ellos y estoy recorriendo la tabla temporal y haciendo una inserción en otra tabla, ahora el problema es que el nombre de la columna que quiero insert depende de lo que obtiene del bucle:

Aquí está el código:

Declare @OutputTable table 
                     (
                         RowID int IDENTITY(1, 1),  
                         ClientID int, 
                         ClientName VarChar(100), 
                         ScoreModule1 VarChar(100), 
                         ScoreModule2 VarChar(100), 
                         ScoreModule3 VarChar(100), 
                         ScoreModule4 VarChar(100)
                     )

Declare @TempModuleNumber table 
                          ( 
                               RowIDNumber int IDENTITY(1, 1), 
                               ModuleNumber varchar (300)
                          )

INSERT INTO @TempModuleNumber(ModuleNumber) 
VALUES ('ScoreModule1'), ('ScoreModule2'),
       ('ScoreModule3'), ('ScoreModule4')

Declare @ModuleRowCountNumber int 
Declare @ModuleCounterNumber int 
Declare @ModuleNumber varchar(300) 

Select @ModuleRowCount = COUNT(@ModuleNumber) 
from @TempModuleNumber

set @ModuleCounterNumber = 1 

while @ModuleCounterNumber <= @ModuleRowCount
begin
    Select @ModuleNumber = ModuleNumber 
    from @TempModuleNumber 
    where RowIDNumber = @ModuleCounterNumber

    Insert into @OutputTable (ClientID, ClientName, @ModuleNumber) --This is where the problem is the @ModuleNumber is. I get a "syntax error". Is there another way of doing this to it depends on what it gets from the Loop?

    Set @ModuleCounterNumber = @ModuleCounterNumber + 1
END
Mostrar la mejor respuesta

use dynamic SQL y ¿dónde está SELECT después de INSERT INTO?

Eso no funcionó. Lo intenté. ¿Hay algún código que puedas mostrarme? Intenté usar SET @SQLQuery ='SELECT * FROM SEC_USERS' Insert into #TBL1 Execute(@SQLQuery). No funcionó. Dijo que hubo un error extraño que no se pudo ejecutar.

Voy a publicar @ Maxi

Solo hice cambios en la parte necesaria:

while @ModuleCounterNumber <= @ModuleRowCount
begin
    Select @ModuleNumber = ModuleNumber 
    from @TempModuleNumber 
    where RowIDNumber = @ModuleCounterNumber

    DECLARE @SQL VARCHAR(MAX)
    SET @SQL = 
    '
    Insert into @OutputTable (ClientID, ClientName, ' + @ModuleNumber + ')
    SELECT A,B,C  //<----------- THIS IS THE MISSING PART I WAS TALKING ABOUT
    '
    EXEC(@SQL)

    Set @ModuleCounterNumber = @ModuleCounterNumber + 1
END