2009-02-02 2 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

간단하고 멋진! 감사합니다 –

+0

기꺼이 도와 드리겠습니다. – cmsjr

+2

예외적으로, sproc 내에 임시 테이블에 삽입 한 경우 다른 임시 테이블에 출력을 삽입 할 수 없습니다 – Unsliced

0

당신의 예가 실제로는 대표적인 것은 아니지만, 내가 가진 첫 번째 질문은 정말로이 두 가지 절차를보다 복잡하게 만들어야합니까? 이와 같은 분해는 다소 SQL과의 반 패턴이다. (일부는 동의하지 않지만, 여기에서 대부분의 동의로 논의 된 것을 보았습니다.)

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 
관련 문제