SQL SELECT wiele kolumn INTO wielu zmiennych


85

Konwertuję SQL z Teradata na SQL Server

w Teradata mają format

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

W SQL Server znalazłem

SET @variable1 = (
SELECT col1 
FROM table1
);

To zezwala tylko na jedną kolumnę / zmienną na instrukcję. Jak przypisać 2 lub więcej zmiennych za pomocą jednej instrukcji SELECT?

Odpowiedzi:


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

Czy to poprawi wydajność / szybkość w porównaniu z wieloma SELECT, czy jest to to samo?
Shankar Nathan

8
Prawdziwą odpowiedzią jest przetestowanie tego i przekonanie się samemu. Nieformalna odpowiedź brzmi oczywiście tak.
underscore_d

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

Oto kilka interesujących informacji na temat SET / SELECT

  • SET to standard ANSI dla przypisywania zmiennych, a SELECT nie.
  • SET może przypisać tylko jedną zmienną naraz, SELECT może przypisać wiele przypisań na raz.
  • W przypadku przypisywania z zapytania SET może przypisać tylko wartość skalarną. Jeśli zapytanie zwróci wiele wartości / wierszy, polecenie SET zgłosi błąd. SELECT przypisze jedną z wartości do zmiennej i ukryje fakt, że zwrócono wiele wartości (więc prawdopodobnie nigdy nie wiesz, dlaczego coś poszło nie tak w innym miejscu - baw się dobrze przy rozwiązywaniu tego problemu)
  • Podczas przypisywania z zapytania, jeśli nie zostanie zwrócona żadna wartość, SET przypisze NULL, gdzie SELECT w ogóle nie dokona przypisania (więc zmienna nie zostanie zmieniona z poprzedniej wartości)
  • Jeśli chodzi o różnice prędkości - nie ma bezpośrednich różnic między SET i SELECT. Jednak zdolność SELECT do wykonywania wielu zadań jednym strzałem daje mu niewielką przewagę szybkości nad SET.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.