SQL SELECT mehrere Spalten INTO mehrere Variablen


86

Ich konvertiere SQL von Teradata zu SQL Server

In Teradata haben sie das Format

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

In SQL Server habe ich gefunden

SET @variable1 = (
SELECT col1 
FROM table1
);

Dies erlaubt nur eine einzelne Spalte / Variable pro Anweisung. Wie ordne ich zwei oder mehr Variablen mit einer einzigen SELECT-Anweisung zu?

Antworten:


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

Verbessert dies die Leistung / Geschwindigkeit im Vergleich zu mehreren SELECTs oder ist es dasselbe?
Shankar Nathan

8
Die wirkliche Antwort ist, es zu testen und selbst zu sehen. Die informelle Antwort lautet natürlich wahrscheinlich Ja.
underscore_d

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

Hier finden Sie einige interessante Informationen zu SET / SELECT

  • SET ist der ANSI-Standard für die Variablenzuweisung, SELECT nicht.
  • SET kann jeweils nur eine Variable zuweisen, SELECT kann mehrere Zuweisungen gleichzeitig vornehmen.
  • Bei der Zuweisung aus einer Abfrage kann SET nur einen Skalarwert zuweisen. Wenn die Abfrage mehrere Werte / Zeilen zurückgibt, löst SET einen Fehler aus. SELECT weist der Variablen einen der Werte zu und verbirgt die Tatsache, dass mehrere Werte zurückgegeben wurden (sodass Sie wahrscheinlich nie wissen würden, warum anderswo etwas schief gelaufen ist - viel Spaß bei der Fehlerbehebung).
  • Wenn bei der Zuweisung aus einer Abfrage kein Wert zurückgegeben wird, weist SET NULL zu, wobei SELECT die Zuweisung überhaupt nicht vornimmt (sodass die Variable nicht vom vorherigen Wert geändert wird).
  • In Bezug auf Geschwindigkeitsunterschiede gibt es keine direkten Unterschiede zwischen SET und SELECT. Die Fähigkeit von SELECT, mehrere Aufgaben auf einmal zu erledigen, bietet jedoch einen leichten Geschwindigkeitsvorteil gegenüber SET.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.