2009-08-27 18 views
59

mam konwertowania SQL z Teradata do SQL ServerSQL SELECT multi-multi-kolumny INTO zmiennej

w Teradata, mają format

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

W SQL Server, znalazłem

SET @variable1 = (
SELECT col1 
FROM table1 
); 

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

Odpowiedz

120
SELECT @variable1 = col1, @variable2 = col2 
FROM table1 
+0

Czy to spowoduje poprawę wydajności/szybkości w porównaniu do wielu SELECT-ów czy jest to to samo? –

+7

Prawdziwą odpowiedzią jest przetestowanie go i przekonaj się sam. Oczywiście odpowiedź nieformalna brzmi oczywiście tak. –

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

Oto kilka ciekawych informacji na temat ustawienia/SELECT

  • SET jest standardem ANSI dla przypisania zmiennej, SELECT nie jest.
  • SET może przypisywać tylko jedną zmienną naraz, SELECT może jednocześnie wykonywać wiele przypisań .
  • Przypisując zapytanie, SET może tylko przypisać wartość skalarną. Jeśli zapytanie zwraca wiele wartości/wierszy , wówczas SET zgłosi błąd. SELECT będzie przypisać jedną z wartości zmiennej i ukryć fakt, że zostały zwrócone wiele wartości (tak pan, że prawdopodobnie nigdy nie wiadomo, dlaczego coś się dzieje źle gdzie indziej - baw rozwiązywanie że jeden)
  • Kiedy przypisując z zapytaniem, czy nie ma wartości zwracane następnie SET będzie przypisać NULL, gdzie SELECT nie będzie dokonać przyporządkowania w ogóle (tak zmienna nie zostanie zmieniona z jego poprzednia wartość)
  • w miarę różnice prędkości - nie ma bezpośrednich różnic między SET i WYBIERZ. Jednak zdolność SELECT do wykonywania wielu zadań w jednym strzale daje mu niewielką przewagę nad wartością SET.
Powiązane problemy