none
T-SQL: Arbeiten mit 2 Resultsets RRS feed

  • 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

    Freitag, 25. Juni 2010 17:52

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 Cursor1

    declare Cursor2 mit Variablen aus Cursor1
    open cursor2
    Fetch from cursor2
    Verarbeite
    Fetch next from cursor2
    close cursor2

    fetch next from cursor1

    close cursor1

    Gruß
    Christa

    Freitag, 25. Juni 2010 19:48

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
    Freitag, 25. Juni 2010 19:45
  • 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 Cursor1

    declare Cursor2 mit Variablen aus Cursor1
    open cursor2
    Fetch from cursor2
    Verarbeite
    Fetch next from cursor2
    close cursor2

    fetch next from cursor1

    close cursor1

    Gruß
    Christa

    Freitag, 25. Juni 2010 19:48