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


8

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

  1. SETコマンド:

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

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

1
SELECTの使用はセマンティックではありませんが、SETよりも速いかどうか知りたいです。
Rafael Kassner、2012年


@RafaelKassner- 一度に複数の変数に値を割り当てるSELECTときに高速です。それ以外の場合、パフォーマンスの違いはごくわずかです。
Nick Chammas

@SQLLearner-そのレポートは決定的な結果を与えません。最初にポスターはそれSETがより速いことを述べ、それから半分下に彼は付け加えます:「奇妙なことに、あなたが言うために実行の数をクランクアップすると、10はSET遅れを取り始めます。」
Nick Chammas

回答:


8

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

結論に助言されるように、あなたのスタイルや開発のニーズに合ったものに基づいて選ぶの間、この素晴らしい比較SELECTしてSET(強調とマイナーが追加書式):

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

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

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

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

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

3

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


1
SETがより高速であることを証明するベンチマークを投稿できますか?
AK

アレックスは、例として、このを見てみてくださいstackoverflow.com/questions/189588/...
MarlonRibunal

マーロン、そのレポートは決定的な結果を与えます。「奇妙なことに、ランの数を10に上げると、SETは遅れをとるようになります。」
Nick Chammas

それが私の答えが「読みやすさ」に傾いている理由です。回答のユースケースシナリオは素晴らしい点です。
MarlonRibunal

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.