SQL 使用动态列名插入
SQL Insert with a dynamic Column name
我有一个临时文件 table,它包含所有列的名称,现在有 4 个,我正在循环临时文件 table 并插入另一个 table, 现在的问题是我要插入的列名取决于它从循环中获得的内容:
代码如下:
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
我只修改了必要的部分:
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
我有一个临时文件 table,它包含所有列的名称,现在有 4 个,我正在循环临时文件 table 并插入另一个 table, 现在的问题是我要插入的列名取决于它从循环中获得的内容:
代码如下:
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
我只修改了必要的部分:
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