2011-02-02 22 views
5

È possibile utilizzare i risultati di una stored procedure in un'altra stored procedure?Utilizzare la stored procedure nidificata provoca la chiamata alla stored procedure Sql Server 2008

I.e.

CREATE PROCEDURE [dbo].[Proc1] 
     @ID INT, 
     @mfgID INT, 
     @DealerID INT 

AS 
BEGIN 

    DECLARE @Proc1Result UserDefinedTableVariable 

    EXEC @Proc1Result = Proc2 
     @SomeID = @ID, 
     @SomeID2 = @mfgID, 
     @SomeID3 = @DealerID 

    -- Now I want to use the table returned by the stored procedure here. 
    SELECT [col1],[col2] FROM @Proc1Result 

END 

Ho provato ad utilizzare INSERT INTO @Proc1Result EXEC Proc2 (with parameters passed), ma INSERT EXEC non possono essere chiamate in un comunicato nidificato.

C'è qualche modo per realizzare questo? L'ambiente è SQL Server 2008.

risposta

9

È possibile annidare le stored procedure up to 32 levels.

Si consiglia di leggere oltre this article per quanto riguarda INSERT-EXEC. Ecco una snippit:

Se some_sp tenta di chiamare some_other_sp con INSERT-EXEC, verrà visualizzato un messaggio di errore di . Pertanto, è possibile avere solo un INSERT-EXEC attivo alla volta. Questo è una restrizione in SQL Server.

5

Hai ragione, INSERT ... EXEC non è possibile nidificare. Da How to Share Data Between Stored Procedures.

Non è possibile nidificare. Se some_sp prova a chiama some_other_sp con INSERT-EXEC, si riceverà un messaggio di errore. Pertanto, è possibile avere solo un INSERT-EXEC attivo alla volta. Questa è una limitazione in SQL Server.

È necessario trovare un altro modo. L'articolo di Erland collegato attraversa praticamente tutte le opzioni che hai e le discute con grande dettaglio.

+0

Come è possibile che ho pubblicato lo stesso link e citato 2 minuti prima di te ma hai più voti? Deve essere l'orsacchiotto ... –

+1

@Abe: il mio ha formattato i nomi della procedura, che richiede ore e ore di lavoro e gli elettori apprezzano lo sforzo extra;) –

+1

Remus cita anche una porzione più grande della fonte, che deve fornire indubbiamente il OP con più contesto sull'argomento. :) –

1

Una sintassi per ottenere risultati in una sp da un altro è:

INSERT INTO [myTable] 
EXEC Proc1 [param1], [param2], [param3], etc. 

Ma si deve creare la tabella prima che inserisce dentro e i nomi dei campi ei tipi devono corrispondere.

+0

si prega di leggere le altre 2 risposte – RichardTheKiwi

+0

Le altre due risposte non sono nemmeno coerenti. (Puoi annidarli tra l'altro.) Non vedo davvero dove l'OP affermi che li annida più di una volta, ma forse non sto capendo correttamente. –

Problemi correlati