web-dev-qa-db-ja.com

T-Sql別のストアドプロシージャのストアドプロシージャからテーブルを返す方法

次のことをしたいと思います。基本的に、ストアドプロシージャに、テーブルを返す別のストアドプロシージャを呼び出させます。これはどのように行われますか?

    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
14
Arron S

ストアドプロシージャのターゲットは、一時テーブルまたは実際のテーブルである必要があります。

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

ストアード・プロシージャーの出力結果セットが、ターゲット表の行の序数位置およびカウントと一致しない場合は、列リストを指定してください。

22
cmsjr

少なくとも上記のように、一時テーブルのアプローチは私にはうまくいきませんでした。変数も同じように簡単に使用できます。

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
4
Dustin Oprea

あなたの例は実際には代表的ではないかもしれませんが、私が持っている最初の質問は、より複雑になるという犠牲を払って、この2つの手順を本当に行う必要があるかということです。このような分解は、SQLのアンチパターンのようなものです。 (一部の人は同意しないでしょうが、私はこれがここSOで多数決で議論されているのを見ました。)

0
dkretz