【问题标题】:SQL Insert with a dynamic Column name具有动态列名的 SQL 插入
【发布时间】:2018-09-14 09:00:59
【问题描述】:

我有一个临时表,其中包含所有列名,现在有 4 个,我正在遍历临时表并插入另一个表,现在问题是我想要的列名insert 取决于它从循环中得到什么:

代码如下:

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

【问题讨论】:

  • 使用dynamic SQLSELECTINSERT INTO 之后在哪里?
  • 那没用我试过有没有你可以告诉我的代码我试过使用SET @SQLQuery ='SELECT * FROM SEC_USERS' Insert into #TBL1 Execute(@SQLQuery)没用说一些奇怪的错误无法执行
  • 我会发帖@Maxi

标签: loops sql-server-2014 sql-insert temp-tables


【解决方案1】:

我只修改了必要的部分:

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

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2015-08-27
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多