2011-01-04 4 views
3

매우 바보 같은 예이지만 주문 테이블에서 최대 주문 ID를 가져와야하는 경우 두 가지 옵션이 있습니다. 하지만이 두 가지에 관심이 있습니다.) 나는 오버 헤드가 줄어든다는 것을 아는 것에 관심이있다.저장 프로 시저의 값을 출력 매개 변수로 반환하는 것과 SELECT 문을 사용하는 경우

제 단순히 값을 선택 하나

CREATE PROCEDURE GetLastOrderID 
AS 
SELECT Max(OrderID) FROM Orders 

하고 상기 시저를 실행할하는 SqlCommand를 생성 .ExecuteScalar를 호출 int로 값을 전송하는 C# 코드 대응.

출력 매개

CREATE PROCEDURE GetLastOrderID (@MaxOrderID INT OUTPUT) 
AS 
SET @MaxOrderId = Max(OrderID) FROM Orders 

로 값을 전달하고, 제 한 후, 다음 통화 .ExecuteNonQuery을 상기 PROC 실행 형 INT의 출력 파라미터를 추가하도록하는 SqlCommand를 만들 C# 코드를 대응 마지막으로 출력 매개 변수의 값을 얻습니다.

다른 하나의 실질적인 이점이 있습니까? 내 직감은 첫 번째 옵션은 명시적인 유형이 없기 때문에 더 많은 시간/리소스가 필요하지만 거기에 확실한 대답이 있는지 알고 싶습니다. (권한의 측면에서 내 "창자 느낌"을 친다 또는 적어도 하나)

+0

'OPUTPUT' 매개 변수는 레코드 세트를 생성하고 반환하는 것보다 훨씬 가볍습니다. 나는 얼마나 많이 생각하지 못합니다. 2 가지 버전을 만들어 루프로 호출하여이 코드를 쉽게 테스트 할 수 있어야합니다. –

+0

@Martin : 그들은 더 가볍지 만, 많은 시간을 부르지 않는 한 그 차이는 작습니다. –

답변

3

번호

당신이 언급되는의 오버 헤드는 사실을 제외하고 아무것도에 TSQL MAX() 문을 실행에 비해 무시할 만하다이다 사소한 수의 행.

가장 이해하기 쉽고 유지하기 쉬운 양식을 사용하십시오.

성능 문제가 확인되면 성능이 저하 될 수 있습니다.

+0

마음에, 이것은 "어리석은"예였습니다. 당신은 정말로이 질문에 답하지 않았습니다.이 특별한 예는 무시할만큼 중요하지 않으므로 중요하지 않습니다. 아마도 더 좋은 예는 테이블에 값을 삽입하고 새 행의 ID를 되 찾는 것입니까? –

+0

@Paul Sainsbury : 예제를 묻는 사람 만 예제를 제어 할 수 있습니다! ;) –

+0

@Paul : 바보 같은 예를 찾지 못했습니다. 나는 나 자신에게 질문을했으면 좋겠다. – Sung

1

출력 매개 변수가 더 가볍습니다.

관련 문제