Esecuzione di una SP da una SP

venerdì 16 giugno 2006 - 23.39

ricky Profilo | Junior Member

Ciao, ho una SP 1 dalla quale richiamo una SP 2 che dovrebbe tornare un valoren che dovrei poi utilizzare in SP 1

Non capisco come fare la chiamata


in questo modo ottengo un errore

declare @result int

set @result = exec MiaSP val1,val2

Grazie

alx_81 Profilo | Guru

ciao! eccoti un esempio:

-- procedura chiamante
CREATE PROCEDURE [dbo].[stp_1] AS BEGIN -- variabile che conterrà il risultato DECLARE @output int -- lancio l'altra sp (stp_2) che somma i primi due parametri e li torna nel terzo exec stp_2 1,4,@output output -- stampo il risultato print @output END

-- procedura chiamata
CREATE PROCEDURE [dbo].[stp_2] ( @param1 int, @param2 int, @res int output ) AS BEGIN -- restituisce nel parametro di output la somma SELECT @res = @param1 + @param2 END

fammi sapere!
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

ricky Profilo | Junior Member

Grazie per la risposta dettagliatissima

Quindi in questo modo


exec stp_2 1,4,@output output


il valore ritornato dalla mia SP è salvato nella var @output??

per quale motivo viene scritt 2 volte output

,@output output ????

Se si fosse chiamata "esito" avrei dovuto fare:

@esito esito

???

Grazie

ricky Profilo | Junior Member

La SP che voglio chiamare ha questa struttura

CREATE PROCEDURE miaSP

{
@Val1 int,
@Val2 int,
@Val3 int

}

declare @esito int

BEGIN TRANSACTION


COMMIT

return @esito


Non posso aggiungere il parametro nella definizione altrimenti dovrei modificare del codice (e non mi è possibile farlo) quindi come posso gestire la mia situazione con questo return?

alx_81 Profilo | Guru

CREATE PROCEDURE miaSP ( @Val1 int, @Val2 int, @Val3 int, -- aggiunta @esito int = -999 output ) BEGIN TRANSACTION set @esito = @Val1 + @Val2 + @Val3 COMMIT

In questo modo dai un default al parametro e eviti di cambiare il codice (il parametro viene inizializzato a -999 o anche altri valori, quello che vuoi tu)

output è la direzione del parametro.. se lo chiami @esito diventa
exec stp_2 @uno, @due, @esito output

Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>CREATE PROCEDURE miaSP
>
>{
>@Val1 int,
>@Val2 int,
>@Val3 int
>
>}
>
>declare @esito int
>
>BEGIN TRANSACTION
>
>
>COMMIT
>
>return @esito
>
>
>Non posso aggiungere il parametro nella definizione altrimenti
>dovrei modificare del codice (e non mi è possibile farlo) quindi
>come posso gestire la mia situazione con questo return?

Ciao ricky,

ti ricordo che con il comando RETURN una stored procedure può restituire solo ed esclusivamente valori con data type int, diversamente occorre ricorrere ai parametri di output che alx_81 ti ha illustrato come utilizzare.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ricky Profilo | Junior Member

Grazie a tutti per l'aiuto!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5