TSQL: объединение следует два, выбирает (процедуры?)

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

Что-то как этот:

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

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

Какая-либо идея?

5
задан OMG Ponies 9 January 2010 в 19:16
поделиться

4 ответа

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

ИЛИ

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

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
7
ответ дан 18 December 2019 в 14:46
поделиться

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

  1. Функции, определяемые пользователем (UDFs)
  2. Видовые
  3. Динамические SQL
  4. Температурные таблицы

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

2
ответ дан 18 December 2019 в 14:46
поделиться

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

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

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

1
ответ дан 18 December 2019 в 14:46
поделиться

Процедуры можно преобразовать в виды.

ИЛИ

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

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
-121--4691068-

Возможно, веб-камера на другом компьютере сломана/неисправна? Или имеет одну из веб-камер, которая не поддерживает API DirectShow, на котором, я думаю, AForge опирается.

-121--3266150-

Можно либо:

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 результата из хранимой процедуры и дайте вызывающему коду обработать 2 результата

3
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

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