2009-02-02 42 views
13

我想執行以下操作。基本上有一個存儲過程調用另一個存儲過程返回一個表。這是如何完成的?T-Sql如何從另一個存儲過程的storedproc中返回一個表

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 

回答

21

存儲過程的目標必須是一個臨時的或實際的表格中,您可以

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

如果輸出結果集的存儲過程的不匹配的序號位置和數量目標表中的行,指定列列表。

+0

簡單而棒!謝謝 – 2009-02-02 19:31:53

0

也許你的例子並不具有真正的代表性,但是我的第一個問題是,你是否真的需要做這兩個過程,代價是更復雜?像這樣分解有點像SQL的反模式。 (儘管有些人會不同意,但我已經看到這與SO的大多數協議討論過。)

4

至少如上所述,臨時表方法對我無效。您可以輕鬆地使用變量。

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 
相關問題