SQL SELECT несколько столбцов INTO нескольких переменных - PullRequest
69 голосов
/ 27 августа 2009

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

в Teradata, они имеют формат

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

В SQL Server я нашел

SET @variable1 = (
SELECT col1 
FROM table1
);

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

Ответы [ 2 ]

143 голосов
/ 27 августа 2009
SELECT @variable1 = col1, @variable2 = col2
FROM table1
34 голосов
/ 27 августа 2009
SELECT @var = col1,
       @var2 = col2
FROM   Table

Вот некоторая интересная информация о SET / SELECT

  • SET - это стандарт ANSI для назначения переменных, а SELECT - нет.
  • SET может назначать только одну переменную одновременно, SELECT может сделать несколько назначения сразу.
  • При назначении из запроса SET может назначать только скалярное значение. Если запрос возвращает несколько значений / строк тогда SET вызовет ошибку. ВЫБРАТЬ назначит одно из значений переменная и скрыть тот факт, что несколько значений были возвращены (так вы, вероятно, никогда не знаете, почему что-то что-то пошло не так - повеселись устранение неисправностей, что один)
  • При назначении из запроса, если значение не возвращено, SET будет присвойте NULL, где SELECT не будет сделать назначение на всех (так что переменная не будет изменена с его предыдущее значение)
  • Что касается различий в скорости - нет прямой разницы между SET и ВЫБРАТЬ. Однако способность SELECT сделать несколько заданий в одном выстрел дает ему небольшую скорость преимущество перед SET.
...