首页 > 解决方案 > 使用动态查询将多个变量插入表中

问题描述

我正在尝试使用临时动态查询将数据插入表变量,然后使用该表变量执行最终查询。我有一个错误“必须声明标量变量”


DECLARE @t TABLE ( TableName NVARCHAR(250) )
declare @i as int = 1,  @A_1 NVARCHAR(250) ='ABC',  @A_2 NVARCHAR(250) ='XYZ', @A_3 NVARCHAR(250) = 'AEI';
WHILE (@i <= 3) 
 BEGIN 
    DECLARE @q NVARCHAR(MAX) = ' DECLARE @t TABLE ( TableName NVARCHAR(250) )
                                insert into @t 
                                select  @A_' + CAST(@i AS VARCHAR) + ' as field
                                from @t
                            '
  INSERT INTO @t
  EXEC(@q)
       SET @i  = @i  + 1
END SELECT * FROM @t

预期的结果应该是:

表名

  1. 美国广播公司
  2. XYZ
  3. AEI

变量 @A_X 可以有 1 或 15 个变量(@A_1、@A_2....@A15)

标签: sqldynamic

解决方案


您可以使用临时表代替表变量。看一下这个:

DROP TABLE #TableList 
GO
CREATE TABLE #TableList (
         A_1 NVARCHAR(250)
        ,A_2 NVARCHAR(250)
        ,A_3 NVARCHAR(250)
)

DROP TABLE #Result 
GO
CREATE TABLE #Result (
         TableName  NVARCHAR(250)
)

INSERT INTO #TableList
VALUES('ABC','XYZ','AEI')

DECLARE @q NVARCHAR(MAX)='';
DECLARE   @i as int = 1

WHILE (@i <= 3) 
BEGIN 
    SET  @q   = @q+CHAR(13)+' 
                    INSERT INTO #Result(TableName)
                    SELECT  A_' + CAST(@i AS VARCHAR) + ' from #TableList;'

    SET @i = @i + 1
END

EXEC sp_executesql @q
PRINT (@q)

SELECT *
FROM #Result

推荐阅读