在存储过程中使用全局临时表时“无效的对象名称”

时间:2018-03-27 04:40:36

标签: tsql sql-server-2014 global-temp-tables

我正在使用几个示例来使用global temp table,例如this& this

我有以下查询将数据导入global temp table

DECLARE @SQL NVARCHAR(MAX)

SET @SQL = N'SELECT * INTO ##tmpDraftTableData  
             FROM ' + @DraftTableName 

EXEC sp_executesql @SQL

请注意,@DraftTableName是动态的,来自不同结构的不同表格,这就是我需要使用动态查询的原因。

然后我想将从上面的全局temp table获取的数据插入到另一个临时表中以循环和处理数据:

SELECT *
INTO #tmpDraftTableData
FROM ##tmpDraftTableData  -- ERROR: Invalid object name ##tmpDraftTableData

好像我不能使用带错误的全局临时表

  

无效的对象名称## tmpDraftTableData

与其他示例代码不同。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

试试这个:

CREATE TABLE ##tmpDraftTableData (ID INT)
INSERT INTO ##tmpDraftTableData VALUES(1)
INSERT INTO ##tmpDraftTableData VALUES(2)
INSERT INTO ##tmpDraftTableData VALUES(3)

DECLARE @SQL NVARCHAR(MAX), @DraftTableName VARCHAR(100)='##tmpDraftTableData'

SET @SQL = N'SELECT * 
            INTO #tmpDraftTableData  
             FROM ' + @DraftTableName +'

             SELECT * FROM #tmpDraftTableData
             '

您可以直接执行查询,而不是使用sp_executesql

PRINT (@SQL)
EXEC (@SQL)

<强>输出:

ID
1
2
3