"Неверное имя объекта" при использовании глобальной временной таблицы в хранимой процедуре

Я следую несколько примеров, чтобы использовать global temp table такие как это и это

У меня есть следующий запрос, чтобы получить данные в 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 ответ

Попробуй это:

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
Другие вопросы по тегам