개발

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

정리하는개발자 2022. 9. 22. 11:24
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
반응형