Aktualisieren neue Spalte mit ResultSet von der gespeicherten Prozedur

Ich habe eine Tabelle mit vorhandenen Daten. Ich habe eine Anforderung zum hinzufügen einer neuen Spalte zu der Tabelle, die aufgefüllt wird mit einem Wert abgerufen, mithilfe einer gespeicherten Prozedur. Dies ist gut für neue Daten hinzufügen, um der Tabelle.

Wie kann ich die gespeicherte Prozedur für jede vorhandene Zeile auf und übergibt die Parameter von zwei vorhandenen Spalten, und dann die Aktualisierung auf die neue Spalte mit dem Ergebnis. Effektiv will ich führen so etwas wie die folgenden:

UPDATE 
  TableWithNewColumn
SET
  NewColumn = EXEC NewProcedure(TableWithNewColumn.ID, TableWithNewColumn.Code);

Sehen fiddle hier: http://www.sqlfiddle.com/#!3/b0625/1

Ich weiß, eine Skalare Funktion wäre ideal für diese Aufgabe, aber leider sind die SP wurde von einem Drittanbieter bereitgestellt und es ist der einzige Weg, ich kann die Daten.

  • Ich schlage vor, Sie verwenden einen inline-SQL-Ausdruck statt des Aufrufs einen proc für jede Zeile. Man könnte fasst den Ausdruck in einem skalaren Funktion für die Wiederverwendbarkeit. Wenn Sie eine gespeicherte Prozedur aufrufen, die ein ResultSet zurückgibt, müssen Sie 1) erstellen Sie einen cursor für die quellabfrage, 2) call proc für jede Zeile mit Resultat eingefügt in eine temp-Tabelle oder table-Variablen, und 3) aktualisieren Sie die Tabelle mit der temporären Tabelle/table-variable.
  • Vielen Dank und ich dachte, dass ein cursor wäre der Weg zu gehen und eine Schleife durch jeden Datensatz. Wenn Sie könnte und kurzes Beispiel, wie dies zu tun ich würde es wirklich schätzen, weil ich noch nicht verwendet einen cursor in SQL Server vor, nur Oracle. Ich werde es erforschen, wenn es sein muss, aber wenn Sie könnten mir angefangen, dass wäre eine große Hilfe.
  • Sie können nicht rufen Sie eine gespeicherte Prozedur von innerhalb einer Funktion. eine gespeicherte Prozedur könnte sich ändern, - Daten und-Funktionen sind nicht erlaubt, das zu tun. siehe diesen Beitrag auf SO für weitere details und Hinweise nicht befolgt werden ^^
InformationsquelleAutor Tobsey | 2014-06-18
Schreibe einen Kommentar