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 '메세지'
반한된 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
반응형
'개발' 카테고리의 다른 글
[Scouter] 할로윈 이스터에그 (0) | 2022.11.03 |
---|---|
[scouter] agent.host 실행시 에러발생(EXCEPTION_ACCESS_VIOLATION) (0) | 2022.10.27 |
[.NET] Java @Deprecated 처럼 .NET에 적용하는 방법 (0) | 2022.09.05 |
iOS 팀즈앱-자바스크립트 prompt 명령어 사용시 앱 종료 버그 (0) | 2022.07.22 |
[DataTables] paginate 문자열(previous/next) 지우는 방법 (0) | 2022.07.18 |