web-dev-qa-db-ja.com

SETとSELECT-違いは何ですか?

T-SQLのSETSELECTの間に機能/パフォーマンスの違いがある場合は、誰かが特定できますか?どのような条件下でどちらかを選択する必要がありますか?


更新:
回答してくれたすべての人に感謝します。数人の人が指摘しているように、 this の記事 Narayana Vyas Kondreddi にはたくさんの良い情報があります。また、記事を読んだ後、ネットを熟読し、 this 要約版 Ryan Farley を見つけました。これは、ハイライトを提供し、それらを共有すると思いました。

  1. SETは変数割り当てのANSI標準ですが、SELECTはそうではありません。
  2. SETは一度に1つの変数のみを割り当てることができ、SELECTは一度に複数の割り当てを行うことができます。
  3. クエリから割り当てる場合、SETはスカラー値のみを割り当てることができます。クエリが複数の値/行を返す場合、SETはエラーを発生させます。 SELECTは、値の1つを変数に割り当て、複数の値が返されたという事実を非表示にします(したがって、他の場所で問題が発生した理由がわからない可能性があります。そのトラブルシューティングを楽しんでください)。
  4. クエリから割り当てるときに値が返されない場合、SETはNULLを割り当てます。ここで、SELECTは割り当てをまったく行いません(したがって、変数は以前の値から変更されません)。
  5. 速度の違いに関しては、SETとSELECTの間に直接的な違いはありません。ただし、1回のショットで複数の割り当てを行うSELECTの機能は、SETよりも速度がわずかに優れています。
39
Steve Dignan

SETは変数に値を割り当てるANSI標準の方法ですが、SELECTはそうではありません。ただし、SELECTを使用して、一度に複数の変数に値を割り当てることができます。 SETを使用すると、一度に1つの変数にのみデータを割り当てることができます。そのため、パフォーマンスではSELECTが勝者になります。

詳細と例については、以下を参照してください。 変数に値を割り当てるときのSETとSELECTの違い

27
TStamper

SQL Server:SELECTを使用する必要がある状況の1つは、@@ ERRORと@@ ROWCOUNTを割り当てる場合です。これらは同じステートメントで設定する必要があるためです(そうしないとリセットされます)。

SELECT @error = @@ERROR, @rowcount = @@ROWCOUNT

(SETは一度に1つの値でのみ機能します)

7
Mitch Wheat

Setは、変数に値を割り当てるためのANSI標準です。

Selectは、複数の変数に値を割り当てるときに使用できます。

詳細については、 Narayana Vyas によるこの詳細な投稿をお読みください。

6
TheVillageIdiot

変数に値を割り当てる両方を設定および選択します。 selectを使用すると、複数の変数に値を割り当てることができます

何かのようなもの

@ var1 = 1、@ var2 = 2を選択します

ここで、setを使用する場合は、個別のsetステートメント(値を割り当てるANSI方式)を使用する必要があります。

@ var1 = 1を設定します

@ var2 = 2を設定します

これがお役に立てば幸いです

乾杯

3
Arnkrishn
0
A-K