値を変数に設定する(パフォーマンスに関して)より良い方法は何ですか?
SET
コマンド:
DECLARE @VarString nvarchar(max);
SET @VarString = 'john doe';
SELECT @VarString;
SELECT
コマンド:
DECLARE @VarString nvarchar(max);
SELECT @VarString = 'john doe';
SELECT @VarString;
パフォーマンスのために厳密にどちらか一方を選択しないでください。
このSELECT
とSET
の優れた比較 (強調とマイナーなフォーマットの追加)の結論でアドバイスされているように、スタイルと開発のニーズに合ったものに基づいて選択します。
ベストプラクティスでは、1つの方法に固執しないことをお勧めします。シナリオによっては、
SET
またはSELECT
の両方を使用する場合があります。以下は、
SET
:を使用するためのいくつかのシナリオです
- 単一の値を変数に直接割り当てる必要があり、値をフェッチするクエリが含まれていない場合
- NULL割り当てが予期されています(
NULL
が結果セットで返されます)- 標準は、計画された移行について従うことを意図しています
- 非スカラーの結果が予想され、処理する必要があります
次のいくつかのケースでは、
SELECT
を使用すると効率的で柔軟です:
- 値を直接割り当てることで複数の変数が入力されている
- 複数の変数が単一のソース(テーブル、ビュー)によって入力されている
- 複数の変数を割り当てるためのコーディングが少ない
- 最後に実行されたステートメントの
@@ROWCOUNT
および@ERROR
を取得する必要がある場合は、これを使用します
コンセンサスは、2つの間に無視できるほどのパフォーマンスの違いがあると思います(SET
の方が高速です)。しかし、あなたが私のような人なら、読みやすさの目的で適切な場所でSET
を使用します。あなたのコードを保守する次の人はそれをありがとう;-)
1つのクエリの結果セットから複数の変数を設定しない限り、常にSETを使用します。このように、SELECTを使用することで、テーブルに対して1回だけクエリを実行します。