SQL SELECT multi-стовпці INTO multi-variable


85

Я перетворюю SQL з Teradata на SQL Server

у Teradata вони мають формат

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

У SQL Server я знайшов

SET @variable1 = (
SELECT col1 
FROM table1
);

Це дозволяє лише один стовпець / змінну на оператор. Як призначити 2 або більше змінних за допомогою одного оператора SELECT?

Відповіді:


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

Чи покращить це виконання продуктивності / швидкості порівняно з кількома SELECT чи це однаково?
Шанкар Натан

8
Справжня відповідь - перевірити це і переконатися на власні очі. Неформальна відповідь - так, звичайно, мабуть.
underscore_d

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

Ось цікава інформація про SET / SELECT

  • SET - це стандарт ANSI для присвоєння змінних, SELECT - ні.
  • SET може призначати лише одну змінну за раз, SELECT може робити кілька призначень одночасно.
  • Якщо присвоювати запит, SET може призначити лише скалярне значення. Якщо запит повертає кілька значень / рядків, тоді SET викличе помилку. SELECT призначить змінне одне зі значень і приховає той факт, що було повернуто кілька значень (так що ви, мабуть, ніколи не дізнаєтесь, чому десь щось пішло не так - отримайте задоволення від усунення несправностей)
  • При призначенні з запиту, якщо не повертається значення, SET присвоює NULL, де SELECT взагалі не виконуватиме призначення (тому змінна не буде змінена з попереднього значення)
  • Що стосується різниці швидкості - прямих відмінностей між SET та SELECT немає. Однак здатність SELECT робити кілька завдань одним пострілом дає йому невелику перевагу в швидкості перед SET.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.