Как установить переменную из запроса SQL? - PullRequest
265 голосов
/ 20 октября 2010

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

declare @ModelID uniqueidentifer

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

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

Спасибо!

Ответы [ 7 ]

450 голосов
/ 20 октября 2010

Использование 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 переменной назначаетсяпоследнее возвращаемое значение (как сказано в womp), без каких-либо ошибок или предупреждений (это может вызвать логические ошибки)
  • При использовании SET произойдет ошибка
27 голосов
/ 20 октября 2010
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

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

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

26 голосов
/ 18 мая 2016
declare @ModelID uniqueidentifer

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

select @ModelID
11 голосов
/ 06 декабря 2017

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

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')
9 голосов
/ 19 июля 2017

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

SELECT TOP 1 @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'
3 голосов
/ 25 июля 2017
Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'

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

0 голосов
/ 14 июня 2019

Вы можете использовать это, но помните, что ваш запрос дает 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...