Aufgrund eines Legacy-Berichtserstellungssystems muss ich einen Cursor verwenden, um die Ergebnismenge aus einer gespeicherten Prozedur zu durchlaufen. Das System erzeugt die Berichtsausgabe, indem es die Daten aus jeder Zeile der Ergebnismenge DRUCKT. Eine Umgestaltung des Berichtssystems würde den Rahmen dieses Problems sprengen.
Soweit ich weiß, erfordert die DECLARE CURSOR-Syntax, dass ihre Quelle eine SELECT-Klausel ist. Die Abfrage, die ich verwenden muss, befindet sich jedoch in einer mehr als 1000 Zeilen langen gespeicherten Prozedur, die dynamisches Sql generiert und ausführt.
Kennt jemand eine Möglichkeit, die Ergebnismenge aus einer gespeicherten Prozedur in einen Cursor zu erhalten?
Ich habe das Offensichtliche versucht:
Declare Cursor c_Data For my_stored_proc @p1='foo', @p2='bar'
Als letzten Ausweg kann ich die gespeicherte Prozedur so modifizieren, dass sie die von ihr erzeugte dynamische SQL zurückgibt, anstatt sie auszuführen, und ich kann diese zurückgegebene SQL in eine andere Zeichenfolge einbetten und diese schließlich ausführen. Etwa so:
Exec my_stored_proc @p1='foo', @p2='bar', @query='' OUTPUT
Set @sql = '
Declare Cursor c_Data For ' + @query + '
Open c_Data
-- etc. - cursor processing loop etc. goes here '
Exec @sql
Haben Sie eine Idee? Kennt jemand eine andere Möglichkeit, die Ergebnismenge eines gespeicherten Prozesses über einen Cursor zu durchsuchen?
Danke.