у меня это работает просто отлично.

ли обновить более одной локальной переменной за один выбор?

Что-то вроде:

set
    @variableOne = avg(someColumn),
    @variableTwo = avg(otherColumn)
    from tblTable

Кажется немного расточительным сделать две отдельные операции выбора для чего-то более простого, чем эта задача:

set @variableOne = ( select avg(someColumn) from tblTable )
set @variableTwo = ( select avg(otherColumn) from tblTable )

Ответы на вопрос(3)

Решение Вопроса

select @var1 = avg(someColumn), @var2 = avg(otherColumn) 
from theTable

еременных. Этот код генерирует одну строку констант и присваивает каждую переменную.

SELECT
  @var1 = 1,
  @var2 = 'Zeus'

Вы даже можете запросить таблицы и сделать назначение таким образом:

SELECT
  @var1 = c.Column1,
  @var2 = c.Column2,
FROM
  Customers c
WHERE c.CustomerID = @CustomerID

Осторожно: этот код работает как цикл while.

Если имеется несколько строк, каждая строка будет назначена переменным, а последняя строка останется той, что осталась там. Если вы не указали порядок, вы отказались от контроля над тем, какая строка будет последней строкой.Если строк нет, переменные не будут назначены вообще. Переменные не будут установлены в нуль - они останутся без изменений. Это ключевая проблема, если присваивание выполняется в цикле (обычно это приводит к бесконечному циклу, поскольку переменные никогда не меняются).

Предпочитаю использовать назначение SET, а не назначение SELECT. Используйте назначение SELECT только при рассмотрении обоих вышеописанных сценариев.

как насчет

SELECT  @variableOne = avg(someColumn),  @variableTwo = avg(otherColumn) from tblTable 

у меня это работает просто отлично.

Ваш ответ на вопрос