5
ストアドプロシージャからスカラー値を単一のC#ルーチンに返す3つの異なる方法のいずれかを使用すると、パフォーマンスに与える影響を考慮する必要があります。誰がこれらのどれが「より速く」、そして最も重要なのはなぜですか?SQL ServerパフォーマンスResultSetと出力パラメータと戻り値
方法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
方法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
方法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
もう1つの精度。方法3(RETURN)では、INTEGER型に制限されています。別のデータ型を返す場合は、方法2または方法1を使用する必要があります。 –
すべてのヘルプに感謝します。個人的には、私は#2に向かっていました。しかし、#2と#3の両方でINTEGERを返すので、#3が最高のパフォーマンスを持つ場所を確認することができました。いくつかのタイプの文字列を返さなければならない場合は#2を使用します。もちろん、以前に規定されているように、結果セットが必要な場合に限り#1を使用します。 –