在存储过程中使用全局临时表时的"Invalid object name"



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

我有以下查询将数据获取到global temp table

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'SELECT * INTO ##tmpDraftTableData  
             FROM ' + @DraftTableName 
EXEC sp_executesql @SQL

请注意,@DraftTableName是动态的,来自具有不同结构的不同表,这就是为什么我需要使用 Dynamic Query

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

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

似乎我无法使用错误的全局临时表

无效对象名称## tmpdraftTabledata

与其他示例代码不同。

我在这里做错了什么?

尝试以下:

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

相关内容

  • 没有找到相关文章