Tôi đang cân nhắc tác động hiệu suất tiềm năng của việc sử dụng một trong ba phương pháp khác nhau để trả về một giá trị vô hướng đơn lẻ từ thủ tục được lưu trữ đến thường trình C# của tôi. Bất cứ ai có thể cho tôi biết cái nào trong số này là "nhanh hơn" và quan trọng nhất là tại sao?Kết quả hiệu suất của máy chủ SQL so với giá trị trả về
Phương pháp 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
Cách 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
Phương pháp 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
Độ chính xác khác. Với Phương pháp 3 (RETURN), bạn bị giới hạn ở loại INTEGER. Nếu bạn muốn trả về một kiểu dữ liệu khác, bạn nên sử dụng Phương pháp 2 hoặc Phương pháp 1. –
Tôi đánh giá cao tất cả sự trợ giúp. Cá nhân, tôi đang nghiêng về phía # 2. Tuy nhiên, khi tôi trả về một INTEGER ở cả hai # 2 và # 3, tôi có thể thấy vị trí # 3 sẽ có hiệu suất tốt nhất. Tôi sẽ sử dụng # 2 nếu tôi phải trả về một số loại chuỗi. Tất nhiên, như đã quy định trước đây, tôi sẽ chỉ sử dụng # 1 nếu tôi cần một tập kết quả. –