2009-08-27 2 views
59

Я преобразования SQL из Teradata в SQL ServerSQL SELECT мульти-столбцов в многофункциональный переменной

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

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

В SQL Server, я нашел

SET @variable1 = (
SELECT col1 
FROM table1 
); 

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

ответ

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

Будет ли это улучшать производительность/скорость по сравнению с несколькими SELECT или это то же самое? –

+7

Настоящий ответ - проверить его и убедиться сами. Разумеется, неофициальный ответ - да. –

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

Вот некоторые интересные сведения о SET/SELECT

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