Как установить переменную из 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'