SQL Server 프로시저 호출 시 OUTPUT 파라미터 이용하기

SQL Server 프로시저를 호출하는 경우 select 문의 결과를 가져오는 경우가 대부분 입니다. 그런데 상황에 따라 다른 값도 같이 가져오면 좋은 경우가 있습니다. 대표적인 것이 목록의 페이지 번호를 나타나기 위해서 전체글의 개수를 가져와야 하는 경우입니다. 이전에는 프로시저 호출 시 입력파라미터만 있는 줄 알고 필요한 값을 가져오기 위해서 다른 프로시저를 다시 호출하는 경우도 있었습니다. 자주 사용하는 것은 아니지만 적재적소에 사용하면 작업의 효율을 높여 줍니다.

소스코드 내에서 SQL Server 프로시저를 호출하는 부분을 보도록 하겠습니다.

var sqlParameter = new List<SqlParameter>()
 {
 new SqlParameter() { ParameterName = "@dealer", SqlDbType = SqlDbType.VarChar, Size = 50, Value = dealer }
 , new SqlParameter() { ParameterName = "@date_from", SqlDbType = SqlDbType.VarChar, Size = 8, Value = dateFrom }
 , new SqlParameter() { ParameterName = "@date_to", SqlDbType = SqlDbType.VarChar, Size = 8, Value = dateTo }
 , new SqlParameter() { ParameterName = "@one_page_data_count", SqlDbType = SqlDbType.Int, Value = onePageDataCount }
 , new SqlParameter() { ParameterName = "@page", SqlDbType = SqlDbType.Int, Value = page }
 , new SqlParameter() { ParameterName = "@total_count", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output }
 , new SqlParameter() { ParameterName = "@payment_amount_sum", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output }
 , new SqlParameter() { ParameterName = "@virtual_account_sum", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Output }
 };

강조된 8, 9, 10 행을 보면 Direction = ParameterDirection.Output 와 같이 지정된 부분이 있습니다. 프로시저의 값을 가져오는 파라미터로 사용하겠다는 의미 입니다.

프로시저에서도 지정해 주어야 합니다.

ALTER PROCEDURE [dbo].[sample_select]
@dealer VARCHAR(50)
, @date_from VARCHAR(8)
, @date_to VARCHAR(8)
, @one_page_data_count int 
, @page int
, @total_count int output
, @payment_amount_sum int output
, @virtual_account_sum int output
AS
BEGIN
select @total_count = count(*) from your_table
select @payment_amount_sum = sum(amount) from your_table_payment
select @payment_amount_sum = sum(price) from your_table_account
...
END

강조된 7, 8, 9행에 output 으로 지정된 것을 확인할 수 있습니다.

프로시저 호출 후 C# 코드에서는 다음과 같이 값을 가져옵니다.

var totalCount = Convert.ToInt32(sqlParameter[5].Value);
var paymentAmountSum = Convert.ToInt32(sqlParameter[6].Value);
var virtualAccountSum = Convert.ToInt32(sqlParameter[7].Value);

프로시저를 테스트 하기위해 단순히 실행만 하면 OUTPUT 파라미터값을 확인하기 어렵습니다. 이럴때에는 SSMS(SQL Server Management Studio)에서 프로시저를 선택하고 마우스 오른쪽 버튼을 클릭하면 저장 프로시저 실행 항목이 있습니다. 이것을 선택하면 대화상자가 나타나는데 여기에 값을 입력하고 실행하면 OUTPUT 파라미터 값도 확인할 수 있습니다.

프로 시저 실행을 선택하면 나타나는 대화상자

프로 시저 실행을 선택하면 나타나는 대화상자

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Time limit is exhausted. Please reload the CAPTCHA.