59 Stimmen

UNION die Ergebnisse mehrerer gespeicherter Prozeduren

Ich habe eine gespeicherte Prozedur, die ich mehrere Male aufrufen muss, indem ich jedes Mal andere Parameter eingebe. Ich möchte die Ergebnisse in einem einzigen Datensatz sammeln. Ist so etwas möglich ...

exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3

Ich habe versucht, die obige Syntax zu verwenden, erhielt aber die Fehlermeldung ...

Incorrect syntax near the keyword 'UNION'

Die gespeicherten Prozeduren, mit denen ich zu tun habe, sind ziemlich komplex und eine Art "Black Box" für mich, so dass ich nicht in die Definition der gespeicherten Prozedur eindringen und etwas ändern kann. Haben Sie Vorschläge, wie man die Ergebnisse zusammenfassen kann?

Ich verwende SQL Server 2008 R2. Danke für jede Hilfe.

90voto

gbn Punkte 407102

Sie müssten eine temporäre Tabelle wie diese verwenden. UNION ist für SELECTs, nicht für gespeicherte Vorgänge

CREATE TABLE #foo (bar int ...)

INSERT #foo
exec MyStoredProcedure 1

INSERT #foo
exec MyStoredProcedure 2

INSERT #foo
exec MyStoredProcedure 3

...

Und hoffen, dass die gespeicherten Procs nicht über INSERT..EXEC.. die bereits nicht verschachtelt werden können. Oder mehrere Ergebnismengen. Oder verschiedene andere brechende Konstrukte

12voto

Ben Punkte 33703

Sie können verwenden INSERT EXEC für diese.

declare @myRetTab table (somcolumn ...)
insert @myRetTab
exec StoredProcName @param1

Verwenden Sie dann union für die Tabellenvariable oder -variablen.

4voto

Transact Charlie Punkte 2177

Sie puede all das tun, aber darüber nachdenken, was Sie fragen......

Sie möchten dem sp mehrere Parameter übergeben und es soll für die verschiedenen Parameter die gleiche Ergebnismenge erzeugen. Sie machen also eine Schleife und rufen die gespeicherte Prozedur wiederholt mit skalaren Daten auf.

Was Sie devrait ist es, die sp so umzuschreiben, dass sie eine Reihe von Parametern verarbeiten kann und ein kombiniertes Ergebnis liefert. Dann führen Sie nur eine mengenbasierte Operation durch.

Sie können 2008 Tabellenvariablen an eine sp übergeben, solange Sie zuerst Ihren eigenen Typ erstellen.

0voto

Vikrant Shitole Punkte 496

Hier die allgemeine Anfrage

DECLARE @sql nvarchar(MAX)
DECLARE @sql1 nvarchar(MAX)

set @sql = 'select name from abc'

set @sql1 = 'select name from xyz'

EXECUTE(@sql + ' union all ' + @sql1)

0voto

Hallo, ich hatte das gleiche Problem. Ich fand die Lösung hier Wenn Sie so etwas wie dies benötigen ( dies wird nicht funktionieren ) :

exec test1 'Variable1', 'Variable2';
UNION
exec test2 'Variable1', 'Variable2;

Wie man die Vereinigung der 2 Speicherverfahren durchführt:

  1. Erstellen Sie eine Variable als Tabelle.

  2. Definieren Sie todos die Spalten, die die Speicherprozedur in den Variablen der Tabelle zurückgeben wird.

  3. Bilden Sie die Vereinigung der Variablen. --Erste Variable

    declare @table1 as table ( 
        column1 nvarchar(20) ,   
        column2 nvarchar(30),
        column3 nvarchar(50)   )

-zweite Variable

  declare @table2 as table ( 
       column1 nvarchar(20) ,   
       column2 nvarchar(30),
       column3 nvarchar(50)  )Insert into @table1 

-Eingabe der von der Speicherprozedur zurückgegebenen Daten in die Variablen

exec test1 'Variable1', 'Variable2';
Insert into @table2
exec test2 'Variable1', 'Variable2';

-Verbindung mit den Variablen herstellen

   select * from @table1 
    UNION 
   select * from @table2

Ich hoffe, dass dieser Beitrag den nächsten Kollegen, die dieses Problem haben, helfen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X