Ważę potencjalny wpływ wydajności na użycie jednej z trzech różnych metod zwracania pojedynczej, skalarnej wartości z procedury składowanej do mojej procedury C#. Czy ktoś może mi powiedzieć, który z nich jest "szybszy" i, co najważniejsze, dlaczego?Zestaw wyników wydajności serwera SQL a parametr wyjściowy a wartość zwracana
Metoda 1:
CREATE PROCEDURE GetClientId
@DealerCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
SELECT ClientId
FROM Client
WHERE ClientCode = @DealerCode
END
-- this returns null if nothing is found,
-- otherwise it returns ClientId in a ResultSet
Metoda 2:
CREATE PROCEDURE GetClientId
@DealerCode varchar(10),
@ClientValue int out
AS
BEGIN
SET NOCOUNT ON
set @ClientValue = -1
set @ClientValue = (SELECT ClientId
FROM Client
WHERE ClientCode = @DealerCode)
END
-- this returns -1 for ClientValue if nothing is found,
-- otherwise it returns ClientId
-- the value for ClientValue is a scalar value and not a ResultSet
Metoda 3:
CREATE PROCEDURE GetClientId
@DealerCode varchar(10)
AS
BEGIN
SET NOCOUNT ON
declare @ClientValue int
set @ClientValue =
(SELECT ClientId FROM Client WHERE ClientCode = @DealerCode)
if @ClientValue is null or @ClientValue = 0
return -1
else
return @ClientValue
END
-- this uses the return value of the stored procedure;
-- -1 indicates nothing found
-- any positive, non-zero value is the actual ClientId that was located
Kolejna precyzja. Metoda 3 (RETURN) ogranicza użytkownika do typu INTEGER. Jeśli chcesz zwrócić inny typ danych, powinieneś użyć metody 2 lub metody 1. –
Doceniam wszelką pomoc. Osobiście skłaniałem się ku # 2. Jednakże, gdy zwracam wartość INTEGER zarówno w punktach # 2, jak i numerach 3, mogłem zobaczyć, gdzie # 3 miałoby najlepszą wydajność. Użyłbym # 2, gdybym musiał zwrócić jakiś typ ciągu. Oczywiście, zgodnie z wcześniejszymi ustaleniami, używałbym # 1 tylko wtedy, gdy potrzebuję zestawu wyników. –