Select execute ...?

Hallo,

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

Ich benutze den MS SQL-Server.

Gibt es eine Lösung dafür?

Verstehe ich nicht ganz? Was kommt von der Stored Procedure zurück, ein Feldname?

VG, Stefan.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nein, ein Ergebniswert.
Im Prinzip wie ein SELECT mit Formel:
z.B.
SELECT Feld1, Feld2, Feld1*Feld2 AS ‚Feld3‘
FROM meineTabelle

Nur, daß ich statt der Formel eine Stored Procedure benutzen möchte, die mir den Ergebniswert zurückliefert.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Jetzt verstehe ich!

Nein, so mit einem Aufwischen geht’s (IMO) nicht. Da brauchst Du eine eigen SP, wo Du mit dem Cursor arbeitest - sprich Record für Record.

/Stefan.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Verstehe ich dich richtig? Du willst einen Prozeduraufruf, gefüttert mit jeweils zwei Feldern aus Deiner Tabelle, in ein SQL-Statement einbauen?

select MyProc(Spalte1, Spalte2) as Spaltex from tabelle where …

Oder übersehe ich etwas?

Gruß

J.

Genau!
Muß doch irgendwie gehen!?

Verstehe ich dich richtig? Du willst einen Prozeduraufruf,
gefüttert mit jeweils zwei Feldern aus Deiner Tabelle, in ein
SQL-Statement einbauen?

select MyProc(Spalte1, Spalte2) as Spaltex from tabelle where

Hi Michael

EXECUTE kannst Du nicht in das SELECT einbauen, aber mit dbo.() AS Feld1 funktionierts.
Aber wo wird @ERGEBNIS deklariert?

Greetz Sherman

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.

Gruß

J.

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.

Gruß

J.

Hallo

Benutzst Du SQL 2k? Wenn ja: Benutze eine Funktion, die Du dann mit dbo.() aufrufen kannst.

Greetz Sherman

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

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]