Вставить в таблицу набор результатов выбора из хранимой процедуры, но количество столбцов не совпадает - PullRequest
3 голосов
/ 19 августа 2010

Мне нужно что-то подобное, которое, конечно, не работает.

insert into Table1
(
  Id,
  Value
)
select Id, value from
(

  exec MySPReturning10Columns

)

Я хотел заполнить Таблицу 1 из набора результатов, возвращенного MySPReturning10Columns. Здесь SP возвращает 10 столбцов, а в таблице всего 2 столбца.

Следующий способ работает, если таблица и набор результатов из SP имеют одинаковое количество столбцов, но в моем случае они не совпадают.

INSERT INTO TableWith2Columns 
  EXEC usp_MySPReturning2Columns;

Кроме того, я хочу избежать добавления "." как связанный сервер только для того, чтобы openquery и openrowset работали в любом случае.

Есть ли способ не определять структуру таблицы во временной таблице (все столбцы с типами данных и длиной)? Что-то вроде CTE.

Ответы [ 4 ]

7 голосов
/ 19 августа 2010

Вы можете использовать временную таблицу в качестве посредника:

insert into #TempTable exec MySP
insert into Table1 (id, value) select id, value from #TempTable
1 голос
/ 19 августа 2010

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

Информация о временных таблицах: http://www.sqlteam.com/article/temporary-tables

0 голосов
/ 19 августа 2010

- Ну, объявите временную таблицу или таблицу var, в зависимости от ожидаемого числа строк - от ИП. Эта таблица будет в основном набором результатов вашего SP.

DECLARE @spResult AS TABLE
(
    ID INT,
    VALUE FLOAT,
    ....
);

- Получить результирующий набор SP в временную таблицу.

INSERT @spResult EXEC STORED_PROC;

- Теперь вы можете запросить результирующий набор SP для ID и значения;

INSERT Table1 (ID, VALUE) 
SELECT ID, VALUE FROM @spResult;
0 голосов
/ 19 августа 2010

Вам не нужно создавать временную таблицу, вы можете сделать это с помощью одного запроса, создав подобное временное представление

with tempView as EXEC MySPReturning10Columns insert into Table1 select id, value from tempView

Временное представление исчезает, как только оператор завершает выполнение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...