ich brauche ein SELECT-Statment, bei dem sich einer der Ergebnisfelder aus mehreren anderen errechnet. Da dieses Errechnen unter anderem aus IF-Anweisungen usw. besteht, habe ich es in eine Prozedur ausgelagert. Ich weiss auch, wie ich einen Rückgabewert mittels OUTPUT-Parameters erhalten kann.
Wie kann ich nun für jeden Datensatz des SELECT-Statements das jeweilige Ergebnis der Prozedur (Funktion) erhalten?
Könnte folgendermaßen aussehen, funktioniert aber leider nicht:
DECLARE @BERECHNET int
SELECT Feld1, Feld2, EXECUTE meine_prozedur Feld1, Feld2, @ERGEBNIS=@BERECHNET OUTPUT AS ‚Feld3‘
FROM meineTabelle
select MyProc(Spalte1, Spalte2) as Spaltex from tabelle where
Genau!
Muß doch irgendwie gehen!?
Ja, ich meine nicht irgendwie, sondern _ exact _ so!
Wie wäre es, wenn Du den Code Deiner Prozedur posten würdest? Ich glaube, hier versteht Dich keiner so richtig.
Hat nicht funktioniert!
Der SQL-Server meldete, daß er MyProc nicht als Funktion identifizieren kann, obwohl sie im Enterprise Manager unter ‚Gespeicherte Prozeduren‘ zu finden ist. Mein Rückgabewert ist einer der Parameter ( float(24) mit OUTPUT deklariert ), nicht der Integer, der mit RETURN zurückgegeben werden kann.
Welchen Parameter sollte er mit untenstehendem Statement auch als Rückgabewert nehmen? Man kann ja anscheinend mehrere als OUTPUT deklarieren. Oder verstehe ich da irgendwas falsch? Kann man vielleicht mit RETURN doch etwas anderes als Integer zurückgeben? Soweit ich weiss, geht das nicht.
select MyProc(Spalte1, Spalte2) as Spaltex from tabelle where
Kann man vielleicht mit RETURN doch etwas anderes als Integer
zurückgeben? Soweit ich weiss, geht das nicht.
Ich dachte doch. Aber es ist zugegebenermaßen ein bißchen her. Zur Not könntest Du eine große Integerzahl zurückgeben und sie hinterher teilen… mit den Output-Parametern muß ich passen.
in select-statements kannst nur funktionen mit rückgabewert aufrufen, jedoch keine prozeduren: prozeduren haben keinen rückgabewert, sondern nur output-parameter (falls definiert), select-statements wollen aber genau einen wert zurück erhalten
ändere die procedure in eine function, dann müßte es funktionieren …
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]