代码之家  ›  专栏  ›  技术社区  ›  SP1

在动态查询中插入临时表中的数据

  •  0
  • SP1  · 技术社区  · 6 年前

    我有这个问题

    declare @SQL  as NVARCHAR(MAX);
    
    create table #TempCalcPerc
    ( 
        PctAPAC nvarchar(50),
        PctEMEA nvarchar(50),
        PctLAmerica nvarchar(50),
        PctNAmerica nvarchar(50)
    )
    
    set @SQL = 'Insert into 
    #TempCalcPerc(PctAPAC,PctEMEA,PctLAmerica,PctNAmerica)
    select RTrim(LTrim(Replace([rRecurringMarginPct-Apac],''%'',''))),
    RTrim(LTrim(Replace([rRecurringMarginPct-Emea],''%'',''))),
    RTrim(LTrim(Replace([rRecurringMarginPct-LatinAmerica],''%'',''))),
    RTrim(LTrim(Replace([rRecurringMarginPct-NorthAmerica],''%'','')))
    from DashboardData
    where DataType = ''SLPayroll'''
    
    exec sp_executeSQL @SQL;
    

    基本上,我只是在执行一些替换操作后,尝试将一些数据插入临时表中。

    虽然在select查询中选择了4列,但我得到以下错误:

    insert语句的select列表包含的项少于insert列表。选择值的数目必须与插入列的数目匹配。

    如果我在不动态的情况下正常地执行SQL,那么查询运行良好。有人能看看我在这里做错了什么吗?

    另外,如果我将查询更改为插入,那么插入似乎可以正常工作。

    set @SQL = 'Insert into 
        #TempCalcPerc(PctAPAC,PctEMEA,PctLAmerica,PctNAmerica)
        select 1,2,3,4'
    
    exec sp_executeSQL @SQL;
    

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kostya    6 年前

    怎么样:

    Create table #TempCalcPerc
    ( 
      PctAPAC nvarchar(50),
      PctEMEA nvarchar(50),
      PctLAmerica nvarchar(50),
      PctNAmerica nvarchar(50)
    )
    
    declare @SQL  as NVARCHAR(MAX);
    SET @SQL = 'Insert into 
    #TempCalcPerc(PctAPAC,PctEMEA,PctLAmerica,PctNAmerica)
    select RTrim(LTrim(Replace([rRecurringMarginPct-Apac],''%'',''''))),
    RTrim(LTrim(Replace([rRecurringMarginPct-Emea],''%'',''''))),
    RTrim(LTrim(Replace([rRecurringMarginPct-LatinAmerica],''%'',''''))),
    RTrim(LTrim(Replace([rRecurringMarginPct-NorthAmerica],''%'','''')))
    from DashboardData
    where DataType = ''SLPayroll'''
    
    exec @SQL;