매우 바보 같은 예이지만 주문 테이블에서 최대 주문 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# 코드를 대응 마지막으로 출력 매개 변수의 값을 얻습니다.
다른 하나의 실질적인 이점이 있습니까? 내 직감은 첫 번째 옵션은 명시적인 유형이 없기 때문에 더 많은 시간/리소스가 필요하지만 거기에 확실한 대답이 있는지 알고 싶습니다. (권한의 측면에서 내 "창자 느낌"을 친다 또는 적어도 하나)
'OPUTPUT' 매개 변수는 레코드 세트를 생성하고 반환하는 것보다 훨씬 가볍습니다. 나는 얼마나 많이 생각하지 못합니다. 2 가지 버전을 만들어 루프로 호출하여이 코드를 쉽게 테스트 할 수 있어야합니다. –
@Martin : 그들은 더 가볍지 만, 많은 시간을 부르지 않는 한 그 차이는 작습니다. –