Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Passaggio di una variabile

51 views
Skip to first unread message

Fulvio Beretta

unread,
Apr 15, 2003, 7:48:35 AM4/15/03
to
Ho bisogno di chiamare una stored procedure all'interno di
un altra stored procedure passandogli un parametro e
ricevendo un valore di ritorno (da utilizzare poi nella
query della stored procedure primaria).

Ho risolto il problema creando una tabella temporanea dove
vado a salvare il mio dato per poterlo utilizzare.

---------------------------------------------------------
create table #Results (my_result_col int)
insert #Results (my_result_col) exec Max_Int @table
select @ind = my_result_col from #Results
select @last1 = cast((@ind - @qty) as varchar(10))
select @selez = 'SELECT * FROM ' + @table + ' where ind
> ' + @last1 + ' ORDER BY ind DESC'
exec (@selez)
----------------------------------------------------------

E' possibile risolvere la cosa diversamente?

Grazie mille

Fulvio Beretta

Luca Bianchi

unread,
Apr 15, 2003, 8:04:04 AM4/15/03
to
Ciao Fulvio...
Il metodo più efficace è quello di definire un parametro di output per la
stored procedure. Se dai un'occhiata al Book On Line di SQL Server alla voce
"Returning Data using OUTPUT parameters" troverai un chiaro esempio di come
risolvere la cosa...


--
Luca Bianchi
Microsoft MVP - SQL Server


"Fulvio Beretta" <fulvio....@st.com> wrote in message
news:060a01c30344$f21863d0$a401...@phx.gbl...

Fulvio Beretta

unread,
Apr 15, 2003, 10:07:50 AM4/15/03
to
Ho provato ad utilizzare la stored procedure con il
parametro di OUTPUT ma con scarsi risultati.
Uno dei parametri che utilizzo e` il nome della tabella
(@table).

Ecco la stored procedure interna:

----------------------------------------------
CREATE procedure Max_Int2 (
@table varchar(20),
@ind int OUTPUT
)as
declare @ind1 as varchar(100)
select @ind1 = 'select max(ind) from ' + @table
exec (@ind1)
GO
----------------------------------------------
ed ecco la chiamante che restituisce solo il risultato di
quella interna ma non esegue la query principale.

----------------------------------------------

CREATE procedure Get_Recs (
@table varchar(20),
@qty integer
)as
declare @ind int
declare @ind2 int
declare @ind1 as varchar(30)
declare @selez as varchar(100)
declare @last as int
declare @last1 as varchar(10)

exec Max_Int2 @table , @ind = @ind2 OUTPUT
select @last1 = cast((@ind2 - @qty) as varchar(10))


select @selez = 'SELECT * FROM ' + @table + ' where ind
> ' + @last1 + ' ORDER BY ind DESC'
exec (@selez)

GO
-------------------------------------------------
L'esecuzione si blocca add 'exec Max_Int2' e non viene
eseguito nient'altro.
Dove sbaglio?

Grazie dell'attenzione

>-----Messaggio originale---

>.
>

Luca Bianchi

unread,
Apr 15, 2003, 11:25:40 AM4/15/03
to
Fulvio, quando crei una stored procedure con un parametro di input devi
ANCHE valorizzare il parametro nella stored procedure stessa...
Quello che vuoi fare tu non è possibile farlo attraverso una stringa da
eseguire con il comando EXECUTE. Nel tuo caso tuttavia non capisco
l'esigenza di creare la sp "interna" poichè il tutto può essere fatto con un
unico comando. Ad esempio puoi semplicemente costruire una stringa con
l'istruzione

SET @sql = 'SELECT * FROM ' + @table + ' WHERE ind > (SELECT MAX(ind) - ' +
CAST(@qty AS VARCHAR(5)) + ' FROM ' + @table + ')'

ed eseguirla con il comando EXECUTE. C'è qualche altra esigenza?

Fulvio Beretta

unread,
Apr 16, 2003, 1:38:47 AM4/16/03
to
Volevo semplicemente utilizzare la stored procedure che
trova il Max(ind) in altre stored procedure... ma visto
che comunque e` praticamente inutile sistemo tutto con un
unico comando!
Nessuna altra esigenza quindi!

Grazie mille Luca!


0 new messages