2011-12-21 8 views
3

いくつかのレコードの数を返す必要があるストアドプロシージャを作成する必要があります。私は結果を読むために.Netを使用しています。ストアドプロシージャから.Net:OUTPUTパラメータまたはExecuteScalarに単一の値を返す方が良いでしょうか?

は、私は、ストアドプロシージャでselect count(*)を行い、それを読むためにSqlCommand.ExecuteScalarを使用することができまたは値を返すようにOUTPUTパラメータを使用することができます。

何が良いの?なぜですか?

+0

または、あなたが尋ねたように、 'RETURN'パラメータを使うことができます:http://stackoverflow.com/questions/8587814/what-is-better-to-return-a-single-value-in-tsql- stored-procedure-a-return-or- – Oded

+0

ストアドプロシージャを作成する必要がありますが、ストアドプロシージャを作成するかどうかを確認する必要があります。あなたはあなたがするべきことをするべきです。 –

+0

@Oded well ...答えは実際には、エラー通知以外の目的では 'RETURN'を使用すべきではありません。 –

答えて

4

あり、このMSDNの記事をチェックアウト:Performance Comparison: Data Access Techniques

を記事では、OUTPUTパラメータとExecuteScaler間のパフォーマンスが同じであることをGetOrderStatusのための性能試験で示し単一値を取得するには、ExecuteScalarに必要なコードは少なくて済みます。

OUTPUTパラメータを使用しないことに関するその他の興味深い考えは、 What's wrong with output parametersです。私はその投稿にOutput params break the fundamental idea of a functionの考えが好きです。

+0

私はC#ドメインに同意しますが、SQLドメインは少し異なります。オーバーヘッドを制限することができます。 –

+1

+1パフォーマンステストリンク用。 [興味深いグラフ](http://i.msdn.microsoft.com/dynimg/IC161808.gif) –

+1

古い記事ですが、おそらくもっと関連性があります。クライアント、ネットワークとサーバーの仕様は非常に優れていますが、技術の選択はおそらく重要ではありません。ストアドプロシージャは関数ではありませんが、私はそこにコメントしました(私も答えました) – gbn

0

間違い - OUTPUTパラメータが最速とrightest方法

+0

この声明を取り戻すための文書がありますか? –

+0

はい、ExecuteScalarはTDSを作成します。これは、OUTPUTパラメータを戻すよりも比較的重い操作です(単語「最速」)。 RETURNは実行のエラー状態のみを返すために推奨されます(これは単語 "右端"のためです)。あなたが証拠を必要とするなら、私は1つを見つけるでしょう –

+2

@OlegDok - 私は、 'OUTPUT'パラメータはもっと軽量であると聞いたことがありますが、実際に実際にあればどんなに有益なのか分かりません。両方のためのTDSパケットの構造を見るのは興味深いでしょう。 –

0

考えを追加する - ExecuteScalarは、SPに別のことが言及されていない場合はステータスコードを返します。それを守ることは良い習慣のようです。

関連する問題