SQLSELECT複数列INTO多変数


86

SQLをTeradataからSQLServerに変換しています

Teradataでは、次の形式になります

SELECT col1, col2
FROM table1
INTO @variable1, @variable2

SQL Serverで、私は見つけました

SET @variable1 = (
SELECT col1 
FROM table1
);

これにより、ステートメントごとに1つの列/変数のみが許可されます。1つのSELECTステートメントを使用して2つ以上の変数を割り当てる方法は?

回答:


173
SELECT @variable1 = col1, @variable2 = col2
FROM table1

これを行うと、複数のSELECTと比較してパフォーマンス/速度が向上しますか、それとも同じですか?
Shankar Nathan

8
本当の答えは、それをテストして自分で確かめることです。もちろん、非公式の答えは「はい」です。
underscore_d 2015

35
SELECT @var = col1,
       @var2 = col2
FROM   Table

SET / SELECTに関するいくつかの興味深い情報があります

  • SETは変数割り当てのANSI規格ですが、SELECTはそうではありません。
  • SETは一度に1つの変数のみを割り当てることができ、SELECTは一度に複数の割り当てを行うことができます。
  • クエリから割り当てる場合、SETはスカラー値のみを割り当てることができます。クエリが複数の値/行を返す場合、SETはエラーを発生させます。SELECTは、値の1つを変数に割り当て、複数の値が返されたという事実を非表示にします(したがって、他の場所で問題が発生した理由がわからない可能性があります。そのトラブルシューティングを楽しんでください)。
  • クエリから割り当てるときに値が返されない場合、SETはNULLを割り当てます。ここで、SELECTは割り当てをまったく行いません(したがって、変数は以前の値から変更されません)。
  • 速度の違いに関しては、SETとSELECTの間に直接的な違いはありません。ただし、1回のショットで複数の割り当てを行うSELECTの機能は、SETよりも速度がわずかに優れています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.