SQL SELECT с несколькими столбцами INTO с несколькими переменными

86

Я конвертирую SQL из Teradata в SQL Server

в Teradata у них есть формат

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

В SQL Server я нашел

SET @variable1 = (
SELECT col1 
FROM table1
);

Это позволяет использовать только один столбец / переменную для каждого оператора. Как назначить 2 или более переменных с помощью одного оператора SELECT?

аля
источник

Ответы:

173
SELECT @variable1 = col1, @variable2 = col2
FROM table1
Дэвид М
источник
Будет ли это улучшать производительность / скорость по сравнению с несколькими SELECT или это то же самое?
Shankar Nathan
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.
Светлозар Ангелов
источник