从 SQL 动态结果插入临时表

Posted

技术标签:

【中文标题】从 SQL 动态结果插入临时表【英文标题】:Insert into Temp Table from SQL Dynamic Results 【发布时间】:2018-09-24 19:51:38 【问题描述】:

我正在尝试将 sql 动态的结果插入到临时表中,但出现语法错误。我已经研究过,但我无法弄清楚我在这里做错了什么

  DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME([month]) 
FROM (SELECT DISTINCT [Month] FROM MyTable) AS [Month]
 order by [month]

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
  N'SELECT Mem_Name, ' + @ColumnName + '
    FROM MyTable   into MyTest
    PIVOT(SUM(Amount) 
          FOR Month IN (' + @ColumnName + ')) AS PVTTable' 
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery 

【问题讨论】:

您有足够的代表知道当您遇到错误时应该分享错误消息。并提供一些细节,以便其他人可以提供帮助。 Here 是一个很好的起点。 你的诱惑在哪里?您没有在此脚本中插入任何内容。你的错误是什么?这会很有帮助 哪个语句有语法错误,错误“near”是什么字符? 我已经更新了我的代码以显示我试图插入 MyTest 表的位置 这是我在帖子中提到的语法错误,它准确地说是“'myTest' 附近的语法不正确。” 【参考方案1】:

我所要做的就是添加这个: ' 到 ##myTempTable

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)

--Get distinct values of the PIVOT Column 
SELECT @ColumnName = ISNULL(@ColumnName + ',','') + QUOTENAME([month]) 
FROM (SELECT DISTINCT [Month] FROM MyTable) AS [Month]
 order by [month]

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery = 
  N'SELECT Mem_Name, ' + @ColumnName + ' into ##myTempTable 
    FROM MyTable   
    PIVOT(SUM(Amount) 
          FOR Month IN (' + @ColumnName + ')) AS PVTTable' 
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery 

【讨论】:

以上是关于从 SQL 动态结果插入临时表的主要内容,如果未能解决你的问题,请参考以下文章

从返回多个结果集的存储过程中插入临时表

SQL临时表使用

SQL 从临时表插入表,并将输出插入临时表

SQL用循环查询的结果 建临时表

SQL 中将游标循环查询的结果插入到临时表中

Postgres 从动态 sql 字符串创建本地临时表(在提交删除时)