Frank (no reg): MS SQL zeilenweise SP rufen

Beitrag lesen

Servus,

was du brauchst, nennt sich "CURSOR".

  
DECLARE @varFeld1 int, @varFeld2 varchar(100) -- deklariere die Variablen in die du für jeden Schleifendurchlauf die Werte schreiben willst, die Datentypen sind nur beispielhaft gewählt  
  
DECLARE myCursor CURSOR /* LOCAL FAST_FORWARD */ FOR  
  SELECT feld1, feld2 FROM Tabelle  -- dein Select Statement  
  
OPEN myCursor  
  
FETCH NEXT FROM myCursor  
  INTO @varFeld1, @varFeld2  
  
WHILE @@FETCH_STATUS = 0 BEGIN  
  EXEC SP_deineProcedure @varFeld1, @varFeld2  
  
  FETCH NEXT FROM myCursor  
    INTO @varFeld1, @varFeld2 -- holt den nächsten Datensatz ab und füllt die variablen  
END  
  
CLOSE myCursor  
DEALLOCATE myCursor  

Cursors sind für diese Art von Verarbeitung aktuell die einzige Möglichkeit und leider gottes nicht gerade sehr schonend. Es gibt verschiedene Optimierungsmöglichkeiten (auskommentierte Optionen am Anfang), die du dir im Handbuch von MS SQL durchlesen solltest. Und als Hinweis, es gibt in 80% der Fälle wo nur die Verwendung eines Cursors möglich scheint immer eine besser Alternative mit etwas mehr Umschreibeaufwand (Denk noch mal genau nach, was du erreichen willst - was ist der Endsieg, äh das Endziel). Bspw. könntest du eine Funktion schreiben und diese in dein eigentliches SELECT mit einbauen, so könnte sie auch von den selektierten Werten gefüttert werden.

Ciao, Frank