Выбрать возвращаемые значения хранимой процедуры - PullRequest
1 голос
/ 01 апреля 2010

У меня есть хранимая процедура, которая возвращает результат с 250 !!! столбцы.

Но мне нужно только 3 из 250.

Я хочу вызвать SP и поместить только 3 значения столбца во временную таблицу. Я не хочу определять временную таблицу с 250 столбцами!

Вот как я хотел бы это сделать, но это, конечно, не работает:

create #myTempTable (id int, value1 int, value2 int)
insert into #myTempTable 
  exec myBigFatStoredProc

Можно ли это как-нибудь сделать?

Пока Юрген

Ответы [ 3 ]

1 голос
/ 01 апреля 2010

Одним из способов будет переключение исходной хранимой процедуры на пользовательскую функцию, которая приводит к TABLE. Тогда вы можете сделать (например,):

SELECT id, value1, value2
FROM dbo.fxnMyFunctionThatReturns250Columns('SomeParameter') x

«Неудобная» вещь в этом - это сценарий, в котором вы хотите, чтобы только 3 столбца всегда имели накладные расходы / попадание при возврате всех 250 столбцов.

Это то, что вполне может стоить иметь отдельное sproc, поскольку это может означать, что сценарий с 3 столбцами может привести к гораздо более оптимальному плану выполнения.

0 голосов
/ 01 апреля 2010

Это время, чтобы не использовать код повторно. Вам нужно только три столбца, а затем написать процедуру, которая делает это. Даже если вы смогли поместить во временную таблицу только три столбца, которые вам нужны, вы все равно тратите ресурсы на их создание.

0 голосов
/ 01 апреля 2010

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

Вкратце, он использует OPENROWSET для выполнения хранимой процедуры в таблице #temp, которая создается на лету, без необходимости именовать и вводить все столбцы.

...