2009-10-22 2 views
0

저장 프로 시저를 실행하고 스칼라 결과를 저장 프로 시저 내부의 로컬 변수에 저장해야합니다.exec 저장 프로 시저의 결과를 변수로 설정하는 방법은 무엇입니까?

구현 방법은 무엇입니까?

E.G.

CREATE PROCEDURE [dbo].GetNthNo AS 
DECLARE @a INT 
DECLARE @d INT 
DECLARE @n INT 
DECLARE @S INT 
SET @S=EXEC spGetNthNo @a,@d,@n 

SELECT @S 

도와주세요.

+0

적어도 저장된 프로 시저의 일부를 표시 할 수 있습니까? 저장된 proc 안에서 당신은 무엇을합니까? –

+0

저장된 proc 또는 적어도 일부 샘플 코드를 확인해야합니다. – mrdenny

답변

2

대신에 :

SET @S=EXEC spGetNthNo @a,@d,@n 

당신이 필요합니다

RETURN 100 

나 :

RETURN @x 
,691

EXEC @S = spGetNthNo @a,@d,@n 

이 그리고 절차 내에서, 당신은 같은 뭔가가 필요

은 프로 시저 실행 후 @S에 대해 원하는 값을 나타냅니다.

출력 매개 변수를 사용할 수도 있습니다. 결합 된 예 :

IF OBJECT_ID('tempdb..#example') IS NOT NULL DROP PROCEDURE #example 
GO 

CREATE PROCEDURE #example 
    @output_param INT OUTPUT 
AS BEGIN 
    SET @output_param = 100 
    RETURN 200 
END 
GO 

DECLARE @return INT, @param INT 
EXEC @return = #example @output_param = @param OUTPUT 
SELECT @return as [return value], @param as [output parameter] 
+0

스토어드 프로 시저의 값을 "RETURN"하는 대신 값을 "SELECT"하면 상위 프로 시저가 실제로 "EXEC"를 기반으로 한 값을 반환하고 해당 프로 시저에 값을 할당하지 않는다는 것을 알아야합니다. 변하기 쉬운. 예를 들어, spGetNthNo가 200을 반환하지 않고 200을 선택하면 @S는 0 (기본값)이고 부모/래핑 프로시 저는 200 (EXEC 결과로)과 0 (값을 선택 한 결과로)을 반환합니다. @에스). – alan

1

CREATE PROCEDURE Test 
    @RetVal INT OUT 
AS 
BEGIN 
    SET @RetVal = 99 
END 

DECLARE @X INT 
EXEC Test @X OUT 
PRINT @X 
뭔가를 시도

편집 :
당신은 spGetNthNo 저장 프로 시저를 해결하는 래퍼을 필요로하는 것 [문제의 T-SQL 조각의 게시 다음 주석], 어쩌면 때문에 이 기존 프로시 저는 원하는 결과를 리턴하지 않습니다. 래퍼의 대안은 단순히 spGetNthNo 자체를 수정하는 것일 수 있으므로 처음에는 원하는대로 작동합니다 (메서드가 현재 기존 API에서 사용되지 않는 경우). 출력 변수

  • 위와 같이
  • 저자에 관계없이 변화가 원래 SP 또는 래퍼 될 것인지의

    , SP의 데이터를 검색하는 두 가지 방법이있다 SP가 "레코드 세트", 즉 행 (레코드)과 컬럼 (필드)으로 구성된 테이블을 반환하도록합니다. (이것은 질문 스 니펫에 표시된대로 SP 끝으로 SELECT 문을 사용하여 수행됩니다.)

출력 변수 접근 방식을 사용하면 SP가 반환 할 때까지 변수에 데이터가 쉽게 배치됩니다. 레코드 세트 apporach를 사용하면 호출하는 논리는 SELECT 문에서와 비슷한 방식으로 반환 된 데이터를 "소비"해야합니다.

반환되는 데이터가 소비되는 방식을 제외하고 이러한 접근 방식 간에는 약간의 차이가 있습니다..
"레코드 세트"접근 방식을 사용하면을 더 많이 반환 할 수 있습니다. 즉, 테이블의 2 차원 특성을 돕는 일부 명명 규칙을 사용하여 명시 적으로 30 개의 변수를 선언해야합니다. "SELECT TOP 10 a, b, c from myTable"SP의 리턴. 또한 SP는 이러한 출력 변수 각각을 명시 적으로 설정해야합니다.
관련이 있지만 더 미묘한 차이점은 레코드 집합 접근 방식을 사용하면 호출시 정의되지 않은 행과 열의 수를 이 반환 할 수 있다는 것입니다. 변수의 수와 유형은 미리 표현할 필요가 없으며 레코드 세트를 둘러싼 메타 데이터가 있습니다.

짧게는 출력 변수 접근 방식이 상태 코드, 최대 값 또는 최소값 (또는 기타 집계 값 및 계산) 또는 몇 개의 필드와 같은 몇 가지 변수의 고정 된 집합을 반환하는 데 더 적합합니다. 예상 단일 레코드에서. Recordset 접근 방식은 저장 프로 시저의 목적이 테이블과 같은 결과를 효과적으로 제공하거나 집계 값의 긴 [및 진화하는] 목록과 같이 매우 많은 값을 반환 할 때 사용됩니다.