본문 바로가기

개발

[.NET] MSSQL OUTPUT을 사용한 프로시저 사용방법

728x90
반응형

 

개인적으로는 권장하지 않지만 OUTPUT를 사용한 프로시저를 실행하거나 개발해야 하는 상황이 발생한다.

(MSSQL은 다중테이블 반환이 워낙 간편해서 OUTPUT을 굳이 사용할 필요가 있는가 하는 입장이다.)

OUTPUT를 사용하는 프로시저 생성

-- TestProc 테스트 프로시저 생성 
CREATE PROC [dbo].[TestProc]
    @pTestId    NVARCHAR(200) = ''
  , @oResult    NVARCHAR(50)  = '' OUTPUT
  , @oMessage   NVARCHAR(500) = '' OUTPUT
AS
	SET NOCOUNT ON;

	-- 파라미터 출력
	Print 'TestId : ' + @pTestId

	-- OUTPUT 지정
	SET @oResult = 'OK'
	SET @oMessage = '성공'
   
	-- RETURN 사용시 OUTPUT를 반환한다.
	-- RETURN

프로시저 실행

-- 변수지정
DECLARE @pTestId NVARCHAR(200), @oResult NVARCHAR(50), @oMessage NVARCHAR(500)

-- 프로시저 실행
EXEC [dbo].[TestProc] @pTestId = 'ID값', @oResult = @oResult OUTPUT, @oMessage = @oMessage OUTPUT

-- OUTPUT 조회
SELECT @oResult AS '결과'
SELECT @oMessage AS '메세지'

[MSSQL] OUTPUT 프로시저 실행

반한된 OUTPUT을 변수로 지정하여 다양하게 사용할 수 있다.

.NET 코드

SqlParameter[] parameters = new SqlParameter[3];
parameters[0] = new SqlParameter("@pTestId", "ID");
parameters[1] = new SqlParameter("@oResult", SqlDbType.NVarChar, 50);
parameters[1].Direction = ParameterDirection.Output;   // OUTPUT 속성지정
parameters[2] = new SqlParameter("@oMessage", SqlDbType.NVarChar, 500);
parameters[2].Direction = ParameterDirection.Output;   // OUTPUT 속성지정

DataSet ds = GetDataSet(connection, CommandType.StoredProcedure, "TestProc", parameters);
        
// 프로시저 실행 후 값 지정
string result = Convert.ToString(arrSqlParameter[1].Value);
string message = Convert.ToString(arrSqlParameter[2].Value);

환경정보

  • MSSQL 2014

참고사이트

https://blog.cloudboost.io/how-to-use-sql-output-parameters-in-stored-procedures-578e7c4ff188

 

728x90
반응형