Wie kombiniere ich Resultsets aus zwei Stored Procedure-Aufrufen?

7

Ich habe eine folgende gespeicherte Prozedur

%Vor%

und ich möchte diese gespeicherte Prozedur aufrufen, wobei @state 0 und 1 ist und die Ergebnismengen von beiden Aufrufen kombiniert mit UNION Semantik zurückgegeben werden, so dass ich ein neues Resultset mit Zeilen aus habe sowohl der erste Anruf als auch der zweite Anruf.

Etwas wie (imaginäres SQL):

%Vor%

Wie erreiche ich das?

    
sharptooth 29.12.2011, 15:27
quelle

5 Antworten

12

Dies kann das Problem zu stark vereinfachen, aber wenn Sie die Kontrolle über das sp haben, verwenden Sie einfach in statt = =

%Vor%

Wenn dies keine Option ist, drücken Sie einfach die Ergebnisse beider Aufrufe in eine temporäre Tabelle:

%Vor%     
brian 29.12.2011, 16:16
quelle
5
%Vor%     
adyusuf 30.12.2011 13:41
quelle
3

Alternativ zu einer Reihe von Aussagen wie diesen:

%Vor%

Sie könnten eine INSERT ... EXEC Anweisung wie unten verwenden:

%Vor%

Die Ergebnisse der beiden Aufrufe von MyStored würden wie bei der vorherigen Methode UNION (oder UNION ALLED) sein.

    
Andriy M 01.01.2012 21:27
quelle
1

Ein langer Weg wäre, einen Wrapper zu erstellen, der das tut - eine Funktion, die eine Liste von Zuständen aufnimmt und sie zu einer finalen Tabelle hinzufügt, die zurückgegeben wird.

Sie können auch festlegen, welche Technologie diese Prozedur aufruft, um die Datensätze zu verknüpfen (d. h., dass .NET die Ergebnismenge jedes Zustands anfügt, den Sie untersuchen)

Wenn Sie eine Statusliste an den Parameter 'state' übergeben möchten, können Sie eine dynamische SQL-Abfrage erstellen

%Vor%

Dies funktioniert hervorragend für einfache Verfahren; Es kann jedoch länger dauern, bis Änderungen vorgenommen werden.

.

Hier ist ein CodeProject-Artikel und ein MS SQL Tipps Artikel , die eine bessere Arbeit in die Details geht

.

BEARBEITEN: Der Parameter @state muss ein nVarChar sein, seit Sie eine kommagetrennte Liste von int-Werten übergeben haben

    
Ray K 29.12.2011 15:56
quelle
0

Wenn die gespeicherte Prozedur, die Sie aufrufen, eine temporäre Tabelle mit dem gleichen Namen wie eine in der aufrufenden Prozedur hat, erhalten Sie diesen Fehler.

z.B. sp1 hat temporäre Tabelle #results

sp2 erstellt Tabelle # Ergebnisse (Felder) Wenn dann versucht wird, in #results in sp2 einzufügen, würde das Ergebnis des Aufrufs von sp1 mit diesem Fehler fehlschlagen. Ändern Sie die temporäre Tabelle in sp2 in #result und versuchen Sie es erneut und Sie sollten sehen, dass dies jetzt funktioniert.

    
Alan Browne 31.05.2016 10:46
quelle