글쓴이 보관물: Toughman

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 파라미터 값도 확인할 수 있습니다.

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

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

이케아 베스켄(IKEA VESKEN)

욕실 근처에 선반 같은 것이 필요했는데 금속이 아닌 플라스틱으로 된 것을 찾아보았는데 마땅한 것이 없었습니다. 그런데 이케아 매장에 방문했을 때 딱 마음에 드는 제품을 발견할 수 있었습니다. 이케아 베스켄IKEA VESKEN 이라고 이름이 붙여진 제품인데 플라스틱으로 된 4단 선반 입니다. 선반 안쪽이 움푹하게 되어 있어 높지 않은 물건들이 떨어질 염려가 적어보였습니다.

별다른 포장없이 단촐합니다. 플라스틱 제품이면 검은 얼룩 같은 것이 묻어 있는 경우가 많은데 이 제품은 그렇지 않았습니다.

베스켄 포장상태

베스켄 포장상태

조립을 하기 위해 겉면에 붙어 있는 종이를 제거하였습니다. 스티커같이 붙어 있는데 꽤 단단하게 붙어 있는 것 같아 떼어낼때 지저분해지지 않을까 생각했는데 깔끔하게 떨어졌습니다.

겉면 스티커를 제거한 모습

겉면 스티커를 제거한 모습

맨 위의 것을 들어보니 모서리 기둥이 4개씩 들어 있었습니다. 그 밑에 있는 것도 마찬가지였습니다.

전체 구성

전체 구성

조립 하기전 눈에 보이지 않는 먼지가 있을 것 같아 물티슈로 닦아냈습니다. 놀랍게도 깨끗한 상태였습니다. 다른 부분도 닦아 보았는데 먼지없이 깨끗했습니다. 별도로 닦지않아도 무방할 것 같았습니다.

조립 설명서를 보니 조립이라고 할 것도 없이 아무런 공구나 도구 없이 끼워맞추면 되는 형식이었습니다.

첫번째 바구니 조립

첫번째 바구니 조립

위의 그림과 같이 끼워 맞추면 되고 위쪽으로 계속 바구니를 올리면 됩니다.

3단까지 조립한 모습

3단까지 조립한 모습

마지막 4단 까지 올리면 끝인데 별것 아닌 것 같지만 마무리 부분이 마음에 들었습니다. 작은 조각을 넣어서 위쪽을 딱 맞게 막아주었습니다.

마지막 4단을 올린 모습

마지막 4단을 올린 모습

위의 그림 왼쪽은 마감전이고 오른쪽은 마감을 한 모양 입니다. 별것 아니지만 작은 부분까지 신경쓴 것이 마음에 들었습니다.

완성하여 욕실 문 옆에 세워둔 모습

완성하여 욕실 문 옆에 세워둔 모습

욕실과 근처에 여기저기 있어던 것들을 올려놓아 정리할 수 있어서 좋았습니다. 그리고 아래쪽에 공간이 있어서 청소할 때 아래쪽 부분도 먼지를 닦을 수 있도록 한 것도 마음에 들었습니다. 그리고 벽에 고정할 수 있도록 해주는 부품이 있는데 저는 필요가 없어 사용하지는 않았습니다. 아이가 있는 집은 고정 부품을 사용하여 넘어지거나 움직이지 않게 하면 좋을 것 같습니다.

제품 정보와 가격은 아래의 주소에서 확인하실 수 있습니다.

http://www.ikea.com/kr/ko/catalog/products/20307867/