2009-02-02 11 views
13

Vorrei eseguire quanto segue. Fondamentalmente una stored procedure chiama un'altra stored procedure che restituisce una tabella. Come è fatto?T-Sql Come restituire una tabella da un storedproc in un altro processo memorizzato

ALTER PROC [GETSomeStuff] 
    AS 
    BEGIN 

    @table = exec CB_GetLedgerView @accountId, @fromDate, @toDate, @pageSize, @pageNumber, @filter, @status, @sortExpression, @sortOrder, @virtualCount OUTPUT 

    Select * from @table 
    --Do some other stuff here   
    END 

risposta

21

L'obiettivo di una stored procedure deve essere una temperatura o un tavolo reale in modo da poter

Insert into #table exec CB_GetLedgerView @accountId, @fromDate, 
@toDate, @pageSize, @pageNumber, 
@filter, @status, @sortExpression, 
@sortOrder, @virtualCount OUTPUT 

Se il set di risultati di output della stored procedure non corrisponde alle posizioni ordinali e il conto delle righe nella tabella di destinazione, specificare un elenco di colonne.

+0

semplice e fantastico! Grazie –

+0

felice di poterti aiutare. – cmsjr

+2

L'eccezione è che se si ha un inserto in una tabella temporanea all'interno della sproc, allora non si può quindi inserire l'output in un'altra tabella temporanea – Unsliced

0

Forse il tuo esempio non è realmente rappresentativo, ma la prima domanda che avrei è, hai davvero bisogno di fare queste due procedure, al costo di una maggiore complessità? La decomposizione come questa è un po 'antipattern con SQL. (Anche se alcuni non saranno d'accordo, ma ho visto questo discusso con accordo di maggioranza qui su SO.)

4

L'approccio alla tabella temporanea, almeno come sopra espresso, non ha funzionato per me. Puoi usare una variabile, altrettanto facilmente.

DECLARE @return_value INT 
DECLARE @tblOutputTable TABLE(Col1 BIT NOT NULL, Col2 INT NOT NULL) 

INSERT INTO @tblOutputTable EXEC @return_value = [dbo].[SomeSp] @Param1 = 15, @Param2 = 2 
Problemi correlati