2015-07-10 2 views
-1

Я использую динамический запрос в SQL, который возвращает мне большой набор данных, который мне нужно вставить во временную таблицу.Вставить результат sp_executesql в таблицу temp

SELECT INTO #tmp из EXEC sp_executesql Работает ли запрос?

Я попытался это, но я получаю сообщение об ошибке «Неправильный синтаксис около ключевого слова„EXEC“

Я знаю, что это работает, используя Вставить в, но я не хочу, чтобы создать таблицу вручную, как это большой стол с большим количеством колонок. Есть ли альтернатива без необходимости создавать временную таблицу вручную?

+1

возможно дубликат [результаты Вставки хранимой процедуры во временную таблицу] (http://stackoverflow.com/questions/653714/insert-results-of-a-stored-procedure-into-a- временная таблица) – Siyual

+0

@Siyual Я заметил это, но это выглядело слишком сложно для простой вставки в таблицу. – TheFallenOne

+0

Не могли бы вы вставить select в инструкцию в свой магазин proc? – Marcin

ответ

0

Нет, это не работает, вы не можете так сделать. Однако это происходит, прежде чем динамический SQL создаст временную таблицу, как обычно, и в динамическую вставку SQL в эту таблицу. Затем, когда вы закончите, у вас будет стол.

+0

Да, я это осознал. Невозможно представить другой вариант, кроме создания таблицы temp из 100 столбцов. – TheFallenOne

+0

Я полагаю, вы могли бы попытаться сделать один выбор в hardcoded, чтобы создать временную таблицу, не уверенный в коде, или если это возможно. Но если это выбрать в 1 строку, то обрезайте ее и следуйте динамической –

0
IF OBJECT_ID('tempdb..##TmepTable') IS NOT NULL DROP TABLE ##TmepTable 
CREATE TABLE ##TmepTable (TmpCol CHAR(1)) 
DECLARE @SQL NVARCHAR(max) =' IF OBJECT_ID(''tempdb..##TmepTable'') IS NOT NULL DROP TABLE ##TmepTable 
         SELECT * INTO ##TmepTable from [MyTableName]' 
EXEC sp_executesql @SQL 

SELECT Alias.* FROM ##TmepTable as Alias 
IF OBJECT_ID('tempdb..##TmepTable') IS NOT NULL DROP TABLE ##TmepTable 
Смежные вопросы