web-dev-qa-db-ja.com

SETまたはSELECTを使用して変数を設定する方が良いですか?

値を変数に設定する(パフォーマンスに関して)より良い方法は何ですか?

  1. SETコマンド:

    DECLARE @VarString nvarchar(max);
    SET @VarString = 'john doe';
    SELECT @VarString;
    
  2. SELECTコマンド:

    DECLARE @VarString nvarchar(max);
    SELECT @VarString = 'john doe';
    SELECT @VarString;
    
8
Gadonski

パフォーマンスのために厳密にどちらか一方を選択しないでください。

このSELECTSETの優れた比較 (強調とマイナーなフォーマットの追加)の結論でアドバイスされているように、スタイルと開発のニーズに合ったものに基づいて選択します。

ベストプラクティスでは、1つの方法に固執しないことをお勧めします。シナリオによっては、SETまたはSELECTの両方を使用する場合があります。

以下は、SETを使用するためのいくつかのシナリオです

  • 単一の値を変数に直接割り当てる必要があり、値をフェッチするクエリが含まれていない場合
  • NULL割り当てが予期されています(NULLが結果セットで返されます)
  • 標準は、計画された移行について従うことを意図しています
  • 非スカラーの結果が予想され、処理する必要があります

次のいくつかのケースでは、SELECTを使用すると効率的で柔軟です:

  • 値を直接割り当てることで複数の変数が入力されている
  • 複数の変数が単一のソース(テーブル、ビュー)によって入力されている
  • 複数の変数を割り当てるためのコーディングが少ない
  • 最後に実行されたステートメントの@@ROWCOUNTおよび@ERRORを取得する必要がある場合は、これを使用します
8
Nick Chammas

コンセンサスは、2つの間に無視できるほどのパフォーマンスの違いがあると思います(SETの方が高速です)。しかし、あなたが私のような人なら、読みやすさの目的で適切な場所でSETを使用します。あなたのコードを保守する次の人はそれをありがとう;-)

3
MarlonRibunal

1つのクエリの結果セットから複数の変数を設定しない限り、常にSETを使用します。このように、SELECTを使用することで、テーブルに対して1回だけクエリを実行します。

2