2010-01-09 6 views
5

J'ai deux procédures - deux énormes ensembles de sélections avec plusieurs sous-sélection et syndicats. J'ai besoin de résultats d'union de ces procédures et j'ai encore besoin qu'ils existent séparément.TSQL: résultats d'union de deux sélections (procédures?)

Quelque chose comme ça:

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

Je lis qu'il est impossible d'avoir l'union sur les procédures et je ne peux pas utiliser des tables temporaires.

Une idée?

+0

Il s'est avéré que je peux utiliser une table temporaire, donc c'est probablement la meilleure solution. Merci pour vos réponses (toutes!). Je peux les utiliser avec mes autres problèmes :) – Gregi

Répondre

7

Vous pouvez convertir les procédures en vues.

OU

Vous pouvez exec les procédures dans une table temporaire, puis lancer l'autre dans la même table temporaire:

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 
+1

Si quelqu'un est bloqué parce qu'il ne peut pas utiliser les tables temporaires, vous pouvez également utiliser une variable de table. –

3

Vous pouvez soit:

1) Insérer le données dans une table temporaire puis sélectionnez à partir de cela:

--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) Il suffit de retourner 2 r esultsets du sproc et laissez votre code d'appel gérer 2 resultsets

1

Sans l'utilisation de tables temporaires, il n'y a que deux autres façons que je peux penser.

  1. Convertissez les s'procs en vues, si possible.

  2. Déplacez la logique sur laquelle proc doit appeler votre application (le cas échéant). Avoir exécuter chaque proc séparément et combiner les résultats.

2

Il existe différentes façons de gérer la situation:

  1. Table-Valued User Defined Functions (UDFs)
  2. Vues
  3. Dynamic SQL
  4. tables Temp

La question omettent certains détails concrets de sorte qu'il est difficile recommander o par rapport à un autre, et encore moins fournir une réponse adaptée. Il est plausible que la logique puisse être effectuée dans une seule requête.

Questions connexes