Ответ 1
SELECT @variable1 = col1, @variable2 = col2
FROM table1
Я конвертирую SQL из Teradata в SQL Server
в Teradata, они имеют формат
SELECT col1, col2
FROM table1
INTO @variable1, @variable2
В SQL Server я нашел
SET @variable1 = (
SELECT col1
FROM table1
);
Это позволяет использовать только один столбец/переменную для каждого оператора. Как назначить 2 или более переменных с помощью одного оператора SELECT?
SELECT @variable1 = col1, @variable2 = col2
FROM table1
SELECT @var = col1,
@var2 = col2
FROM Table
Вот некоторая интересная информация о SET/SELECT
- SET - стандарт ANSI для назначения переменной, SELECT - нет.
- SET может назначать только одну переменную за раз, SELECT может делать несколько заданий сразу.
- При назначении из запроса SET может назначать только скалярное значение. Если запрос возвращает несколько значений/строк то SET поднимет ошибку. ВЫБРАТЬ будет присвоить одно из значений переменной и скрыть тот факт, что было возвращено несколько значений (так вы, вероятно, никогда не узнаете, почему что-то едет не так в другом месте - получайте удовольствие устранение неполадок в этом)
- При назначении из запроса, если нет возвращаемого значения, SET назначить NULL, где SELECT не будет сделать назначение вообще (так что переменная не будет изменена с ее предыдущее значение)
- Что касается разницы в скорости - прямых ограничений между SET и SELECT. Однако способность SELECT сделать несколько присвоений в одном выстрел дает ему небольшую скорость преимущество над SET.