2009-02-02 26 views
13

Me gustaría hacer lo siguiente. Básicamente, un procedimiento almacenado llama a otro procedimiento almacenado que devuelve una tabla. ¿Cómo se hace esto?T-Sql Cómo devolver una tabla desde un archivo almacenado en otro proceso almacenado

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 

Respuesta

21

El objetivo de un procedimiento almacenado tiene que haber una temperatura o una mesa real, de modo que pueda

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

Si el conjunto de resultados de salida del procedimiento almacenado no coincide con las posiciones ordinales y el recuento de la filas en la tabla de destino, especifique una lista de columnas.

+0

simple y sorprendente! Gracias –

+0

me alegro de poder ayudar. – cmsjr

+2

La excepción a esto es que si tiene una inserción en una tabla temporal dentro de sproc, entonces no puede insertar su salida en otra tabla temporal – Unsliced

0

Tal vez su ejemplo no es realmente representativo, pero la primera pregunta que tengo es, ¿realmente necesita hacer estos dos procedimientos, a costa de una mayor complejidad? La descomposición como esta es algo así como un antipatrón con SQL. (Aunque algunos estarán en desacuerdo, pero he visto esto discutido con acuerdo de la mayoría aquí en SO.)

4

El enfoque de tabla temporal, al menos como se expresó anteriormente, no funcionó para mí. Puedes usar una variable, igual de fácil.

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 
Cuestiones relacionadas