【问题标题】:Insert into a table multiple variables using dynamic query使用动态查询将多个变量插入表中
【发布时间】:2018-12-03 22:50:58
【问题描述】:

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


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. ABC
  2. XYZ
  3. AEI

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

【问题讨论】:

  • 您真的需要将其作为动态查询执行吗?您可以更改数据模型以使其更灵活吗? sommarskog.se/dynamic_sql.html
  • 它需要是动态的,因为变量 @A_X 可以有多个值(从 1 到 15)

标签: sql dynamic


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多