Как установить переменную из SQL-запроса?

Я пытаюсь установить переменную из SQL-запроса:

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'

Очевидно, я не делаю этого правильно, так как он не работает. Может ли кто-нибудь предложить решение?

Спасибо!

Ответ 1

Использование SELECT:

SELECT @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'

Использование SET:

SET @ModelID = (SELECT m.modelid 
                  FROM MODELS m
                 WHERE m.areaid = 'South Coast')

См. этот вопрос о различии между использованием SELECT и SET в TSQL.

Предупреждение

Если этот оператор select возвращает несколько значений (плохо для начала):

  • При использовании SELECT переменной присваивается последнее значение, которое возвращается (как указано womp), без каких-либо ошибок или предупреждений (это может вызвать логические ошибки)
  • При использовании SET произойдет ошибка

Ответ 2

SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

Если ваш оператор select возвращает несколько значений, вашей переменной присваивается последнее возвращаемое значение.

Для справки об использовании SELECT с переменными: http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx

Ответ 3

declare @ModelID uniqueidentifer

--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')

select @ModelID

Ответ 4

Я предпочитаю просто устанавливать его из оператора объявления

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')

Ответ 5

Используйте TOP 1 если запрос возвращает несколько строк.

SELECT TOP 1 @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'

Ответ 6

Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'

В этом случае, если у вас есть два или более возвращенных результатов, то ваш результат является последней записью. Так что помните об этом, если вам могут быть возвращены еще две записи, поскольку вы можете не увидеть ожидаемый результат.

Ответ 7

Вы можете использовать это, но помните, что ваш запрос дает 1 результат, множественные результаты вызовут исключение.

declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')

По-другому:

Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'