Benutzer mit den meisten Antworten
T-SQL: Arbeiten mit 2 Resultsets

Frage
-
Hallo,
ich möchte 2 (komplexe) Select Statements bauen, die in einer Schleife laufen.
Das 2. Select soll Daten aus dem 1. Select als Variable in der Where Bedingung
haben.
Die Ergebnisse beider Selects sollen in Cursorn zur Verfügung stehen,
damit sie in Variablen eingelesen, weiterverarbeitet und ausgegenen werden können.
Also(stark vereinfacht):
Cursor1 = SELECT Feld1, .... From Tabelle1....
Cursor2 =SELECT Feld2,..... From Tabelle2....WHERE FELD2 = @FELD1 (aus Tabelle 1)
Ich bekomme die Schachtelung mit den 2 Cursorn nicht hin.
Der 2. Cursor beinhaltet nie Ergebisse.
Wo/Wann muss ich denn den 2. Cursor öffnen/schließen
Momentan mache ich:
Open Cursor1
fetch from cursor1 into....
while @@fetch_status = 0
begin
open cursor2
Fetch from cursor2...into...
Close Cursor2
fetch next from cursor1 into....
end
Ich hoffte das 2. Select / der 2. Cursor würde in jedem Durchlauf den aktuellen Wert aus dem 1. bekommen.... tut es aber nicht
Für jedweilige Hilfe wäre ich sehr, .... , sehr dankbar!
viele Grüße,
Stefan
Antworten
-
Hallo Stefan,
Du mußt den zweiten Cursor innerhalb des ersten deklarieren, öffnen, ausführen und weieder schließen. Die Variablen müssen bei der Deklarierung gefüllt sein.
Also:
declare Cursor1
open cursor1
Fetch from Cursor1declare Cursor2 mit Variablen aus Cursor1
open cursor2
Fetch from cursor2
Verarbeite
Fetch next from cursor2
close cursor2fetch next from cursor1
close cursor1
Gruß
Christa- Als Antwort vorgeschlagen Elmar BoyeEditor Samstag, 26. Juni 2010 07:54
- Als Antwort markiert Robert BreitenhoferModerator Montag, 9. August 2010 15:11
Alle Antworten
-
Muss es ein Cursor sein, oder darf es auch etwas Set-basierte Logik auf die Systeme wie SQL Server optimiert sind?
Spass beiseite. Vielleicht beschreibst Du mal mit Tabellenstrukturen, Beispieldaten und dem Ergebnis das Du erwartest Dein Problem etwas genauer. :-)
-- Frank Kalis Microsoft SQL Server MVP Webmaster: http://www.insidesql.org- Als Antwort vorgeschlagen Ralf B. _ Dienstag, 29. Juni 2010 13:13
-
Hallo Stefan,
Du mußt den zweiten Cursor innerhalb des ersten deklarieren, öffnen, ausführen und weieder schließen. Die Variablen müssen bei der Deklarierung gefüllt sein.
Also:
declare Cursor1
open cursor1
Fetch from Cursor1declare Cursor2 mit Variablen aus Cursor1
open cursor2
Fetch from cursor2
Verarbeite
Fetch next from cursor2
close cursor2fetch next from cursor1
close cursor1
Gruß
Christa- Als Antwort vorgeschlagen Elmar BoyeEditor Samstag, 26. Juni 2010 07:54
- Als Antwort markiert Robert BreitenhoferModerator Montag, 9. August 2010 15:11