PDA

Visualizza la versione completa : [SQL SERVER] Return in "User defined functions"


igio80
29-03-2007, 16:46
Salve a tutti.

Vi riporto il mio dilemma:

Mi sono creato una UDF (chiamata dbo.Recordset) di tipo tabellare (RETURNS TABLE) che dato in input un determinato ID estrae da un altro database una serie di informazioni.

Adesso ho creato un'altra UDF (chiamata dbo.Controllo) che richiama sempre se stessa a meno che non sia valida una condizione: in tal caso richiama la dbo.Recordset.

Quando vado ad eseguire:
SELECT dbo.Controllo(52)
mi viene generato il seguente errore:
"Invalid object name 'dbo.Recordset'."

So che una UDF di tipo tabellare va richiamata con la sintassi:
SELECT * FROM dbo.Recordset(52)

Ho pensato (erroneamente) che nella mia UDF dbo.Controllo per richiamare la dbo.Recordset si dovesse scrivere:

1) RETURN dbo.Recordset(@ID)
oppure
2) RETURN SELECT * FROM dbo.Recordset(@ID)

Nel primo caso mi genera l'errore sopra detto in fase di esecuzione.
Nel secondo caso mi viene generato invece l'errore:
"return statements in scalar valued functions must include an argument"

Domande:
a) cosa si deve passare al comando RETURN per richiamare un'altra UDF di tipo tabellare? (con quelle scalari non ho problemi)
b) se la dbo.Recordset fosse scalare non avrei problemi, ma è possibile creare una funzione scalare che restituisca un recordset? Che valore di ritorno avrebbe?
c) potrei impostare anche la mia dbo.Controllo con valore di ritorno tabellare e fargli eseguire dei controlli usando senza problemi cursori e blocchi IF?

Non sono riuscito a rispondermi.
Qualcuno può aiutarmi?

Grazie,
Luigi.

LeleFT
29-03-2007, 17:10
Siccome nessuno qui ha la sfera di cristallo, ci piacerebbe sapere anche di cosa si tratta:

Hai un linguaggio di programmazione? Se così andrebbe specificato nel titolo
Se si tratta di un DBMS (credo che sia questo il caso) dovresti specificare (almeno nel titolo!!) di che DBMS si tratta.

Si tratta di codice VBA? In questo caso, non solo non l'hai specificato, ma saresti anche nella sezione sbagliata.


Insomma... un po' di informazioni sono indispensabili.


Ciao. :ciauz:

igio80
30-03-2007, 10:48
Scusami, hai perfettamente ragione.
Ero convinto di aver letto SQL SERVER e invece no.

Si tratta di una UDF scritta su SQL SERVER 2000.
Non è codice VBA ma semplice T-SQL.

Se può bastare spero di ricevere un aiuto.
Grazie e scusate ancora la dimenticanza.

Luigi.

Loading