TSQL: объединение результатов из двух выборок (процедур?) - PullRequest
5 голосов
/ 09 января 2010

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

Примерно так:

if @Param = 1 Then 
    PROCEDURE1
if @Param = 2 THEN 
    PROCEDURE2
if @Param = 3 Then
    PROCEDURE1 union PROCEDURE2

Я прочитал, что объединение процедур невозможно, и я не могу использовать временные таблицы.

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 09 января 2010

Вы можете преобразовать процедуры в представления.

OR

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

create table #sometable (table definition here)

if @Param = 1 or @Param = 3 begin
    insert #sometable exec PROCEDURE1
end

if @Param = 2 or @Param = 3 begin
    insert #sometable exec PROCEDURE2
end

select * from #sometable
3 голосов
/ 09 января 2010

Вы можете либо:

1) Вставьте данные во временную таблицу, затем ВЫБЕРИТЕ из этого:

--Define #t here, with correct schema to match results returned by each sproc
INSERT #t EXECUTE PROC1
INSERT #t EXECUTE PROC2
SELECT * FROM #t

2) Просто верните 2 набора результатов из sproc и позвольте вашему вызывающему коду обрабатывать 2 набора результатов

2 голосов
/ 09 января 2010

Существуют различные способы справиться с ситуацией:

  1. Пользовательские функции с табличными значениями (UDF)
  2. Просмотры
  3. Динамический SQL
  4. Темп столы

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

1 голос
/ 09 января 2010

Без использования временных таблиц я могу придумать только два способа.

  1. Преобразуйте s'procs в представления, если это возможно.

  2. Переместите логику, по которой proc будет вызывать ваше приложение (если оно существует). Пусть он запускает каждый процесс отдельно и объединяет результаты.

...