I\'m trying to set a variable from a SQL query:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where areaid = \'South Coast\'
Use TOP 1
if the query returns multiple rows.
SELECT TOP 1 @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
I prefer just setting it from the declare statement
DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')
select @ModelID
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
If your select statement returns multiple values, your variable is assigned the last value that is returned.
For reference on using SELECT with variables: http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx
SELECT @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
SET @ModelID = (SELECT m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast')
See this question for the difference between using SELECT and SET in TSQL.
If this select statement returns multiple values (bad to begin with):
SELECT
, the variable is assigned the last value that is returned (as womp said), without any error or warning (this may cause logic bugs)SET
, an error will occurYou can use this, but remember that your query gives 1 result, multiple results will throw the exception.
declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')
Another way:
Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'