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'