2015-02-25 3 views
0

У меня есть сценарий, когда я пытаюсь сделать mutliple insert из хранимой процедуры с разными значениями параметров одновременно во временную таблицу, чтобы соединить все результаты.Несколько вставка в таблицу с использованием хранимой процедуры в SQL

Моя температура таблица определена как-

create table #temptab (transaction_id varchar(20), contract_no varchar(20)) 

СП имеет, что я уверен, выполнение здесь возвращает ровно два столбца с тем же определением, как временная таблица.

Код выполняется успешно, когда я Single ВСТАВКИ в этот #temptab, например:

INSERT INTO #temptab (transaction_id,contract_no) 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169049 

Это дает мне ошибку, когда я пытаюсь НЕСКОЛЬКО INSERTS с хранимой процедурой, перепробовал много способов, например:

1) Без использования значений ключевых слов, тот, как одной вставки выше: текст

INSERT INTO #temptab (transaction_id,contract_no) 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169049, 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169076, 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169090 

Ошибка:

Msg 156, Level 15, State 1, Line 3 
Incorrect syntax near the keyword 'EXEC'. 
Msg 156, Level 15, State 1, Line 4 
Incorrect syntax near the keyword 'EXEC'. 

2) Использование SELECT INTO заявления:

select * into #temptab from EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169049 

Текст ошибки:

Msg 156, Level 15, State 1, Line 1 
Incorrect syntax near the keyword 'EXEC'. 

Я знаю, используя OPENQUERY заявление, но я ищу пути к НЕСКОЛЬКИХ вставить в таблицу с использованием процедур с различными параметрами, которые возвращают результат, определенный в соответствии с структурой таблицы, или если я могу вручную выбрать столбцы из набора результатов для вставки в таблицу.

+0

, чтобы добавить к моему запросу, я в настоящее время использую ** SQL Server 2008 R2 ** над моей Windows 7. (если это где-то может повлиять на выполнение) – Shanks911

+0

Можно ли преобразовать хранимую процедуру в функцию таблицы? В противном случае вы можете создать такую ​​оболочку вокруг хранимой процедуры, а затем вы можете свободно выбирать из результата функции. – CyberDude

+0

Я пытаюсь с вашим предложением @CyberDude, вернется как можно скорее. Спасибо – Shanks911

ответ

0

Это должно быть просто

INSERT INTO #temptab (transaction_id,contract_no) 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169049 

INSERT INTO #temptab (transaction_id,contract_no) 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169076 

INSERT INTO #temptab (transaction_id,contract_no) 
EXEC USP_FEED_MGMT_GETFEEDTRANSACTIONLISTBYFEEDID 169090 

Там нет никакого способа, чтобы результаты союза нескольких Execs, только последовательные вставки один ResultSet один.

+0

Спасибо за подсказку @Andy, но в случае, если количество параметров, которые вы видите выше, увеличится на 500 больше значений, в этом случае не представляется возможным написать одну и ту же строку кода 500 раз. Также может замедлить процесс вставки. – Shanks911

+0

Не уверен, правильно ли я вас понял ... Но если у вас есть какая-то логика в изменении параметра для хранимой процедуры, то определенно вы можете обернуть эти строки 'insert into exec' в некоторый цикл и не писать явно все вызовы , –

+0

Подумайте, я обернул его, как 'Select 'insert в exec' из таблицы where column = value', и я повторяю значения в цикле. Спасибо за помощь @ Andy ... !!! РЕШЕНИЕ СЕЙЧАС – Shanks911

Смежные вопросы