Подтвердить что ты не робот

T-SQL, обновление нескольких переменных в одном элементе

Возможно ли обновить несколько локальных переменных в одном элементе?

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

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

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

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

Ответ 1

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

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

Ответ 2

Вы можете использовать назначение SELECT для назначения нескольких переменных. Этот код генерирует одну строку констант и присваивает каждому переменную.

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

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

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

Остерегайтесь: этот код работает как цикл while.

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

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

Ответ 3

как насчет

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

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