非常にばかげた例ですが、注文テーブルから最大注文IDを取得する必要がある場合、2つのオプションがあります。しかし、私はこれらの2つだけに興味があります)。私はオーバーヘッドが少なくなることを知ることに興味があります。ストアドプロシージャの値を出力パラメータとして返すSELECTステートメント
単に値を選択する最初のもの:
CREATE PROCEDURE GetLastOrderID
AS
SELECT Max(OrderID) FROM Orders
した後、PROCを実行.ExecuteScalarを呼び出し、intに値をキャストするSqlCommandオブジェクトを作成するために、C#コードに対応します。
出力パラメータ
CREATE PROCEDURE GetLastOrderID (@MaxOrderID INT OUTPUT)
AS
SET @MaxOrderId = Max(OrderID) FROM Orders
として値を通過し、第1、次いで、その呼.ExecuteNonQueryを、PROCを実行int型の出力パラメータを追加するために、SqlCommandオブジェクトを作成するために、C#コードに対応します、最後に出力パラメータの値を取得します。
本当に他のものよりも利点がありますか?私の気持ちは、明示的な型は与えられていないので、最初のオプションはより多くの時間とリソースを必要とするだろうということですが、確かな答えがあるかどうかを知りたいのです。 (権限の面で私の「腸の感触」を打つか、少なくとも一つ)
「OPUTPUT」パラメータは、レコードセットの作成および返すよりもはるかに軽量であることを意味します。私はどれくらい考えてもわかりません。 2つのバージョンを作成してループで呼び出すことで、これを簡単にテストすることができます。 –
@Martin:彼らは軽いですが、何度も呼び出さなければ、その差は小さくなります。 –