Снять результат хранимой процедуры в качестве таблицы? [дубликат]

Этот вопрос уже имеет ответ здесь:

У меня в настоящее время есть хранимая процедура, которая выполняет сложный запрос и возвращает набор данных. Я хотел бы бросить этот набор данных к таблице (на котором я могу выполнить дальнейшие запросы), если вообще возможный. Я знаю, что могу сделать это использование табличного UDF, но я предпочел бы избегать этого в этой точке. Есть ли какой-либо способ, которым я могу выполнить эту задачу?

Править: Хорошо... так SProc я использую (записанный третьим лицом, и я, как предполагается, не изменяюсь, это) выполняет довольно сложный избранный оператор для возврата набора данных позиции о заказах на покупку. Я могу воссоздать его как UDF, но затем я должен был бы поддерживать UDF и удостовериться, что это изменяется как и когда наш поставщик изменяет их SProc. Я хотел бы далее совершенствовать эту информацию о позиции по многим критериям такой как (но не ограниченный) номера изделия, коды поставщиков, центры затрат, и т.д. Вся эта информация возвращена исходным SProc, и я просто должен смочь управлять им далее. Мой мыслительный процесс был то, что, если я могу так или иначе рассматривать результаты SProc как таблица (или получить их в формат таблицы некоторого типа) затем я могу выполнить дальнейшие запросы против исходного набора результатов для ограничения по упомянутым выше критериям. Сообщите мне, необходимы ли дальнейшие детали.

1
задан Brian Tompsett - 汤莱恩 26 February 2017 в 21:35
поделиться

4 ответа

Рассматривали ли вы возможность использования table-valued parameters? Они появились в SQL 2008.

-- Редактировать --

Нет, неважно, они годятся только для передачи данных в хранимые процедуры.

0
ответ дан 2 September 2019 в 23:31
поделиться

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

0
ответ дан 2 September 2019 в 23:31
поделиться

Привести результат хранимой процедуры как Таблица?

Да, и это используется довольно часто. Ему просто нужен один или несколько операторов select:

Create Procedure #Foo
As
Select object_id, name
From sys.columns

Тем не менее, вы не можете ни присоединиться к этому набору результатов, ни легко использовать его из другого сохраненного процесса (хотя есть способ). Учитывая ваше редактирование, возникает вопрос, можете ли вы использовать результаты сохраненной процедуры другой сохраненной процедурой. Технически да. Вы можете заполнить временную таблицу результатами процедуры. Однако вы должны объявить свою временную переменную или временную таблицу с той же структурой столбцов, которая возвращается первым набором результатов сохраненной процедуры.

Declare @Data Table ( object_id int, name nvarchar(128) )

Insert @Data
Exec #Foo

Select *
From @Data

(Или используйте гораздо более умное решение OPENROWSET, как упомянули Кейд Ру и OMG Ponies)

1
ответ дан 2 September 2019 в 23:31
поделиться

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

Но мне интересно, зачем вам нужна хранимая процедура с табличной оценкой (которой нет в SQL Server), если есть функции с табличной оценкой...

1
ответ дан 2 September 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: