2013-10-14 4 views
0

하나 개 이상의 출력 매개 변수와 함께 작동하는 방법 : ALTER PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...내가처럼 보이는 출력 매개 변수가있는 SP가 하나의 저장 프로 시저

내가 값을 얻을 vb.net에서 해당 프로 시저를 호출을 계산. 내 문제는 : 나는 다음과 같은 구조로 8 SP가 있습니다 :

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ... 
CREATE TABLE @TempTable 
Begin 
Select ... 
End 
SET @VarName = Result 

그러나 TempTable은 항상 같습니다. 아니요 하나의 저장 프로 시저 만 사용하여 8 개의 값을 모두 얻는 방법을 찾고 있습니다. 내 생각 :

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ... 
CREATE TABLE @TempTable 
---Get first value 
Begin 
Select ... 
End 
SET @VarName1 = Result 
---Get second value 
Begin 
Select ... 
End 
SET @VarName2 = Result 
... 

어떻게 내가 라인을 다시 작성해야합니까 : ALTER PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT는 IR 나는 심지어 배열로 작업 할 수 있습니다?

답변

1

모든 쿼리가 포함 된 단일 저장 프로 시저를 사용할 수 있습니다. 다음은 8 개의 필드가있는 단일 행 결과 집합을 반환하며 특정 필드 이름 또는 색인을 사용하여 코드에서 가져올 수 있습니다.

CREATE PROCEDURE [dbo].[SP_Name] 
    @VarName decimal(18,2) 
AS 

BEGIN 
    DECLARE @VarName1 Datatype, @VarName2 Datatype, [email protected] Datatype 

    SELECT @VarName1 = yourCol 
    FROM --First query 

    SELECT @VarName2 = yourCol 
    FROM --Second query 
    ... 

    SELECT @VarName8 = yourCol 
    FROM --Eighth query 

    --Finally Select all the variables 
    SELECT @VarName1 Col1, @VarName2 Col2, ...,@VarName8 Col8 
END 

또는 8 가지 검색어 모두를 반환하려는 경우에도 가능합니다. 단일 저장 프로 시저에서 선택 쿼리를 수행하고 코드에서 DATASET을 가져 와서 0부터 시작하는 인덱스 (예 : DataTable1 = YourDataSet.Tables[0])를 사용하여 개별 테이블에 액세스 할 수 있습니다.

+0

안녕하세요! 귀하의 답변에 감사드립니다. 따라서 데이터 집합 솔루션을 사용하겠습니다. 나는 어쩌면 내가 8 개의 값을 모두 outputparameter (배열)에 넣고 cmd.Parameters.Add ("@ Varname [1]", SqlDbType.Int)와 같은 식으로 호출 할 수있는 솔루션이라고 생각했습니다. Direction = ParameterDirection .산출; – ruedi

+0

글쎄, 하나 또는 여러 개의 [출력 매개 변수] (http://technet.microsoft.com/en-us/library/ms187004 (v = sql.105) .aspx)를 단일 저장 프로 시저에 사용하여 액세스 할 수 있습니다 그러나 제 생각에는 단일 쿼리를 반환하고 8 개의 출력 매개 변수를 선언하지 않고 가져 오는 것은 쉽습니다. – Kaf

관련 문제